Android利用drawable文件夹自定义控件背景、样式

本文介绍了如何利用Android的drawable文件夹创建selector、shape和layer-list类型的XML文件,来实现自定义控件的选中效果、外观设计和多样式叠加。通过设置state_focused、state_pressed、state_selected实现不同状态的样式,并通过shape定义控件的描边、内边距、颜色和圆角。同时,通过layer-list可以组合多种样式,实现更复杂的视觉效果。

一.自定义控件的选中效果

在drawable文件夹下新建selector类型的xml文件(右键drawable,选择新建android xml file),文件名任意,内容如:

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/whole_show_c" />
    <item android:state_pressed="true" android:drawable="@drawable/whole_show_c" />
    <item android:state_selected="true" android:drawable="@drawable/whole_show_c" />
    <item android:drawable="@drawable/whole_show" />
</selector>

/*state_focused表示是否是非触摸状态,true表示是非触摸状态。其中android:drawable可以引用drawable文件夹下其它资源文件,比如shape资源,用来实现控件常规、按下、选中等样式*。

使用方法:在布局文件中,控件的背景属性中引用这些资源,以下类同*/

 

二.自定义控件的外观

新建shape类型的xml文件,如:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <stroke
        android:width="1px"
        android:color="@color/color_black" />

    <padding
        android:bottom="3dp"
        android:left="3dp"
        android:right="3dp"
        android:top="3dp" />
    <solid
        android:color="@color/color_white"
        />

   <corners
        android:bottomLeftRadius="0dp"
        android:bottomRightRadius="0dp"
        android:radius="1dp"
        android:topLeftRadius="@dimen/indicator_corner_radius"
        android:topRightRadius="@dimen/indicator_corner_radius" />

</shape>

/*

stroke表示描边

padding内边距

solid表示实体,即控件的整体区域

corners表示圆角

*/

三.多样式叠加

新建layer-list类型的xml文件,如:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <shape>
            <solid android:color="@color/stroke" />

            <corners android:radius="5dip" />

            <stroke
                android:width="1dp"
                android:color="@color/stroke" />
        </shape>
    </item>
    <item>
        <scale
            android:scaleGravity="center"
            android:scaleHeight="5dp"
            android:scaleWidth="5dp" />
    </item>

</layer-list>

 

综合示例:

<?xml version="1.0" encoding="UTF-8"?>  
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" >
 
    <item android:id="@android:id/background">  
        <shape>  
            <corners android:radius="5dip" />  
            <gradient android:startColor="#ff707070" 
                android:centerColor="#ff707070" android:endColor="#ff707070" 
                android:centerY="1" android:angle="270" />     
        </shape>  
    </item>  

     <item android:id="@android:id/secondaryProgress">
         <clip>
             <shape>
                 <corners android:radius="5dip" />
                 <gradient
                         android:startColor="#ffaaa9a7"
                         android:centerColor="#ffaaa9a7"
                         android:centerY="1"
                         android:endColor="#ffaaa9a7"
                         android:angle="270"
                 />
             </shape>
         </clip>
     </item>
    
     <item android:id="@android:id/progress">  
        <clip>  
            <shape>  
                <corners android:radius="5dip" />  
                <gradient android:startColor="#ffA90101" 
                    android:centerColor="#ffA90101" android:endColor="#ffA90101" 
                    android:centerY="1" android:angle="270" />     
            </shape>  
        </clip>  
    </item>  
</layer-list>   

本文出自 “Focus_000” 博客,请务必保留此出处http://120806872.blog.51cto.com/8289253/1417169

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值