如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android123就写到过Android Button按钮控件美化方法里面提到了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" />       <solid android:color="#ff9d77"/>       <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>        <item android: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可以看作是常规状态下。

附shape全部属性定义:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"     android:shape=["rectangle" | "oval" | "line" | "ring"] >     <gradient         android:angle="integer"         android:centerX="integer"         android:centerY="integer"         android:centerColor="integer"         android:endColor="color"         android:gradientRadius="integer"         android:startColor="color"         android:type=["linear" | "radial" | "sweep"]         android:usesLevel=["true" | "false"] />     <solid         android:color="color" />     <stroke         android:width="integer"         android:color="color"         android:dashWidth="integer" <!--点划线-->        android:dashGap="integer" />     <padding         android:left="integer"         android:top="integer"         android:right="integer"         android:bottom="integer" />     <corners         android:radius="integer"         android:topLeftRadius="integer"         android:topRightRadius="integer"         android:bottomLeftRadius="integer"         android:bottomRightRadius="integer" /> </shape>

更多相关文章

  1. 解决Android的ListView控件滚动时背景变黑(转)
  2. Androidの自定义进度条ProgressBar实现
  3. Android入门之Style与Theme
  4. Android入门第十六篇之Style与Theme
  5. Android帧布局
  6. Android中的控件
  7. Android事件分发之dispatchTouchEvent()
  8. Android属性动画ValueAnimator源码简单分析
  9. android 自学日记(三) ---Intent

随机推荐

  1. Android实现为GridView添加边框效果
  2. Android(安卓)NDK c调用java代码
  3. Android(安卓)- View Alpha值
  4. Android的Activity获取fragment和fragmen
  5. Android(安卓)全屏与沉浸式
  6. android与j2me移植之clipRect
  7. Android中Dialog的使用
  8. Android使用AudioRecord遇到的问题与解决
  9. Android通知
  10. Android(安卓)MediaRecorder系统结构