• Android -- 资源使用和总结经验分享


    颜色资源                                                                                      

    • 颜色XML文件格式
    <?xml version="1.0" encoding="utf-8"?>
         <resources>                //resources根元素
            <color name="" >#000000</color>
                                            //color子元素
         </resouces>
    • 引用格式
    //java代码中:
    R.color.color_name  //(这是一个int型的数据,用于表示资源的地址)
    <!--XML文件中:-->
     @color/color_name
    • 获得颜色值的方法
    getResources().getColor();   //返回一个类似#0000FF的颜色值

    字符串资源                                                                                  

    • XML文件格式
    <?xml version="1.0" encoding="utf-8"?>
         <resources>                //resources根元素
            <string name="" >StringHere</string>
                                            //string子元素
         </resouces>
    • 引用格式
    //java代码中:  
    R.string.string_name
    <!--XML文件中: -->
     @string/string_name
    • 获得字符串的方法
    Resources.getString(int);    //返回一个String类型的对象
    //注意在控件中setText(int resid)   和setText(String string_name)    这两个方法都是允许的

    尺寸资源                                                                                     

    • XML文件
    <dimen name=dimen_name> dimen_value</dimen>
          <!--尺寸值的单位可以是px(像素)  或者 mm(毫米,实际屏幕尺寸)或dp-->
    • 引用格式
    // java代码:  
     R.dimen.dimen_name
    <!--XML文件中:    -->
    @dimen/dimen_name
    • 获取方法
    Resources.getDimension(R.dimen.dimen_name);
    //注意使用这个方法返回的是一个float类型的值,而setWidth()参数一般要求是int 类型的,所以要进行一次强制类型转换。

    XML资源文件                                                                               

    • XML文件

    android程序自带的xml 文件一般放在values/xml/xml_name.xml  处,这里需要使用new->file床建一个新的xml文件;

    xml文件的版本

    <?xml version="1.0" encoding="utf-8"?>
    • 引用格式
    //java
    R.xml.xml_name
    • 获取方式
    Resources.getXml(int resid );   //返回的是一个XmlResourceParser对象

    别人经验总结分享                                                                         

    • 实现圆角的效果——学会使用描述背景的drawable/中的 xml文件

    需要在drawable文件夹中创建xml文件,文件的父控件类型为shape,在shape父控件中,有<solid/>  <corners/> <stroke/> <padding/> 等属性,分别处理背景的填充颜色、边角的曲率、边框线的宽度和颜色、上下左右内边框(即背景超出使用改背景的空间的宽度)

    例如,若想实现一个圆角的ImageButton,可以创建一个 fillet_shape.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <solid android:color="#ffffff"/>
        <corners android:radius="10px"/>
        <padding android:left="3dip" android:top="3dip" android:right="3dip" android:bottom="3dip"/>
        
    </shape>

    然后在Activity类中用ImageButton的实例设置setBackgroundResource(); 或者在xml布局文件中在配置控件属性使用  android:background="@drawable/fillet_shape"  注意这里在配置好背景之后,在为ImageView设置显示的图片时,只能使用setImageResource()而不能使用setBackgroundResource();

    • ListView如何调整每一个Item边框的宽度并且避免Item之间的分割线颜色太深?

    方法就是上面介绍的自定义drawable/ 中xml文件,来配置边和背景属性,另外在配置ListView控件的属性时 设置android:divider="#aaaaaa" android:dividerHeight="0px"  。

    • 怎样解决ListView中添加Button之后就不响应单击事件的问题?

    原因是Button抢夺了焦点,最简单的解决办法是:在自定义的每一个ListItem的布局文件中在根标签的属性中添加上 android:descendantFocusability="blocksDescendants" 即拒绝ListItem中的子控件获得焦点。

    • 怎样实现在点击某个控件以外的屏幕区域就使该控件消失的效果?本例中实现在点击ListView以外的区域就会使ListView消失的效果。

    方法是覆写MainActivity的onTouchEvent()方法,根据点击的坐标(x,y)与目标控件通过getLocation获得的控件左上角坐标,再结合目标控件的宽和高,判断点击的点是否在控件内,进而决定对该控件执行怎样的操作。

    @Override
        public boolean onTouchEvent(MotionEvent event) {
            // TODO Auto-generated method stub
            if(event.getAction()==MotionEvent.ACTION_DOWN && isVisible){
                int[] location=new int[2];
                //调用getLocationInWindow方法获得某一控件在窗口中左上角的横纵坐标
                loginList.getLocationInWindow(location);
                //获得在屏幕上点击的点的坐标
                int x=(int)event.getX();  
                int y=(int)event.getY();
                if(x<location[0]|| x>location[0]+loginList.getWidth() ||
                        y<location[1]||y>location[1]+loginList.getHeight()){
                    isIndicatorUp=false;
                    isVisible=false;
                    
                    listIndicatorButton.setBackgroundResource(R.drawable.indicator_down);
                    loginList.setVisibility(View.GONE);   //让ListView列表消失,并且让游标向下指!
                    
                }                    
            }      
            return super.onTouchEvent(event);
        }
    • layer-list的使用方法

    layer-list的作用是叠放多个图层,这从名字上就可以看出,因为本节想做出一个一边没有边框,其它边界上没有边框的背景效果,使用<shape > 中的<stroke/>标签就没有办法满足了,解决的办法就是在drawable 文件夹中创建一个layer-list文件,然后创建两个图层<item>  第一个item放的是边框的颜色,第二个图层放的是内部的颜色,并且通过设置第二个item的根标签属性,设置第二个item比第一个item窄的程度,这样第一个item的颜色就会在边框处显示出来,从而做出边框的效果。

    1

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item >
            <shape >
                <solid android:color="#cccccc"/>
            </shape>   <!--上面是第一个图层-->
        </item>
                           
        <item android:left="1dip" android:top="1dip" android:right="1dip" android:bottom="0dip">
             <!-- 上面一行是设置哪个边框的关键步骤,即第二个图层比第一个图层闪出来的边框! -->
            <shape >
                <solid android:color="#f0f0f0"/>
               
            </shape>
        </item>
    
    </layer-list>
    • 如何理解ExpandableListView的生命周期?

    对于ExpandableListView,当刚刚创建该对象并且设置好适配器之后,EListView的每一个group都是没有展开的,当点击某一个group时,系统会把所有的group 和展开的childItem 重新绘制一遍,其中每一个的group 的最后一个childItem放的isLastChild 为true.

    当有group展开或者关闭时会调用onGroupExpanded()和onGroupCollapsed() 方法。

    • 如何动态获得ExpandableListView的高度?

    创建一个一个int 变量 height,  在ExpandableListView刚刚创建时,设置其高度为所有group的宽度之和,然后当打开或者关闭group时,在onGroupExpanded()和onGroupCollapsed() 方法中对height 的值进行增加或者减少,并且通过LayoutParams对象即使更新空间的高度,从而实现动态更新ExpandableListView的高度。

    具体代码如下:

    1、获得ListItem的高度,这里比如获得group的高度,需要调用适配器的getGroupView的方法

    View listItem=  listView.getExpandableAdapter().getGroupView(参数);
    
    listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
    //这一个必须有,因为listItem 在通过inflate()方法获得时并未指定父控件,因此导致onMeasure()方法中无法对宽度和高度进行解析,所以这里将布局类型强制设定成wrapContent 类型,然后再调用measure()方法
    
    listItem.measure(0,0);     
    
    //0,0是两个参数,用于比较,measure()方法,用于计算控件的尺寸,关于该方法的具体细节请参考:http://blog.csdn.net/lilybaobei/article/details/8021868
    
    int HEIGHT=listItem.getMeasuredHeight();

    2、设置ExpandableListView的高度,通过LayoutParams对象

    ViewGroup.LayoutParams params=listView.getLayoutParams();
    //获得尺寸参数
     params.height=HEIGHT*3;
    listView.setLayoutParams(params);

    以上两点问题的提出主要是因把ListView、ExpandableListView放在一个 ScrollView中时往往会出现显示不全的问题,因此解决的办法就是动态更新ListView/ExListView的高度,以使列表能够显示完整。

    • ListView的边界比较模糊,颜色变淡

    解决这个问题的方法是在ListView的属性设置中添加上  android:fadingEdge="none",这样边界就不会模糊了。

    我是天王盖地虎的分割线                                                                

    参考:http://www.cnblogs.com/carlos-vic

  • 相关阅读:
    Django和Angular.js模板标签冲突的解决方式
    ImageMagick 使用经验
    Getting Real内容浓缩
    RA layer request failed
    [硬件结构]硬件体系结构中的缓存的定性与定量分析案例
    hdu5373
    百度地图之标注一组地理坐标&lt;2&gt;
    【KMP】hdu1867(A + B for you again) 杭电java a题真坑
    hdu1034 简单模拟
    杂谈之WEB前端project师身价
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3863733.html
Copyright © 2020-2023  润新知