android开发技巧精髓五

14.Android控件美化Shape你会用吗?

如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android123就写到过AndroidButton按钮控件美化方法 里面提到了xml的selector构造。当然除了使用drawable这样的图片外今天Android开发网谈下自定义图形shape的方法,对于Button控件Android上支持以下几种属性shape、gradient、stroke、corners等。

  我们就以目前系统的Button的selector为例说下:

         <shape>
            <gradient
               android:startColor="#ff8c00"
               android:endColor="#FFFFFF"
               android:angle="270" />
            <stroke
               android:width="2dp"
               android:color="#dcdcdc" />
            <corners
               android:radius="2dp" />
            <padding
               android:left="10dp"
               android:top="10dp"
               android:right="10dp"
               android:bottom="10dp" />
        </shape>

    对于上面,这条shape的定义,分别为渐变,在gradient中startColor属性为开始的颜色,endColor为渐变结束的颜色,下面的 angle是角度。接下来是stroke可以理解为边缘,corners为拐角这里radius属性为半径,最后是相对位置属性padding。

对于一个Button完整的定义可以为

  <?xml version="1.0"encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <gradient
               android:startColor="#ff8c00"
               android:endColor="#FFFFFF"
               android:angle="270" />
            <stroke
               android:width="2dp"
               android:color="#dcdcdc" />
            <corners
               android:radius="2dp" />
            <padding
               android:left="10dp"
               android:top="10dp"
               android:right="10dp"
               android:bottom="10dp" />
        </shape>
    </item>

    <itemandroid:state_focused="true" >
        <shape>
            <gradient
               android:startColor="#ffc2b7"
               android:endColor="#ffc2b7"
               android:angle="270" />
            <stroke
               android:width="2dp"
               android:color="#dcdcdc" />
            <corners
               android:radius="2dp" />
            <padding
               android:left="10dp"
               android:top="10dp"
               android:right="10dp"
               android:bottom="10dp" />
        </shape>
    </item>

   <item>      
        <shape>
            <gradient
               android:startColor="#ff9d77"
               android:endColor="#ff9d77"
               android:angle="270" />
            <stroke
               android:width="2dp"
               android:color="#fad3cf" />
            <corners
               android:radius="2dp" />
            <padding
               android:left="10dp"
               android:top="10dp"
               android:right="10dp"
               android:bottom="10dp" />
        </shape>
    </item>
</selector>

注意Android123提示大家,以上几个item的区别主要是体现在state_pressed按下或state_focused获得焦点时,当当来判断显示什么类型,而没有state_xxx属性的item可以看作是常规状态下。

15. Android开发者应该保持以下特质

Android123推荐新手应该遵循

  1. 深读SDK文档

  2. 深读SDK的APIDemo和Samples

  3. 掌握GIT开源代码

  4. 多了解Android开源项目,学习别人的手法写程序。

16. Android数组排序常见方法

  Android的数组排序方式基本上使用了Sun原生的Java API实现,常用的有Comparator接口实现compare方法和Comparable接口的compareTo方法,我们对于一个数组列表比如 ArrayList可以通过这两个接口进行排序和比较,这里Android123给大家一个例子

private final Comparator cwjComparator = new Comparator() {

        private finalCollator   collator = Collator.getInstance();
        public final int compare(Object a,Object b) {
           CharSequence  a = ((Item) a).sName;
            CharSequence b = ((Item) b).sID;
            returncollator.compare(a, b);
        }
    };

我们的ArrayList对象名为mList,则执行排序可以调用方法

Collections.sort(mList, cwjComparator);

你可能感兴趣的:(android开发技巧精髓五)