Button、Shape、selector和layer-list

Button自定义样式,相信项目中一定会用到。先来看一下效果

这是图片的正常样式
这里写图片描述

这是图片按下时的效果
这里写图片描述

实现上面效果的关键点:

  1. 自定义两个xml文件,分别对应未按下和已按下时的button样式;
  2. selector文件配置按钮在不同状态下显示的效果。

下面先看两个button的样式:
circle_corner_button.xml,按钮正常的显示效果

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

    <item>
        <shape>
            <solid android:color="#FFFFFF"/><!背景颜色>
            <corners android:radius="5dp"/><!4角弧度>
            <stroke android:color="#F58939" android:width="1dp"/><!边框颜色,宽度>
            <padding android:bottom="5dp" android:left="5dp" android:right="5dp" android:top="5dp"/>
        </shape>
    </item>

</layer-list>

另一个:
circle_corner_button_selected.xml,按钮选中效果

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

    <item>
        <shape>
            <solid android:color="#ffffff"/>
            <corners android:radius="5dp"/>
            <stroke android:color="#dbdbdb" android:width="1dp"/>
            <padding android:top="5dp" android:right="5dp" android:bottom="5dp" android:left="5dp"/>
        </shape>
    </item>

</layer-list>

最后是selector的状态设置:
circle_corner_button_selector.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/circle_corner_button_selected" android:state_pressed="true"/><!按下时的图片>
    <item android:drawable="@drawable/circle_corner_button"/><!默认的图片背景>
</selector>

使用的时候我们直接android:background引入即可

 <Button android:layout_width="78dp" android:layout_height="32dp" android:id="@+id/corner_btn" android:textSize="15sp" android:textColor="#ff3336" android:text="button1" android:layout_marginRight="17dp" android:layout_marginLeft="17dp" android:layout_gravity="center_vertical" android:background="@drawable/circle_corner_button_selector"<!这里引用>
        />

到此。上面展示的效果已经完成。下面看下shap、selector和layer-list的一些理论知识。

  1. Shape
    作用:XML中第一的几何形状
    位置:res/drawable/文件的名称.xml

    使用方法:
    Java代码中:R.drawable.文件的名称
    XML中:ANdroid:background=”@drawable/文件的名称”

    属性:

<shape>  Android:shape=["rectangle" | "oval" | "line" | "ring"]
    其中rectagle矩形,oval椭圆,line水平直线,ring环形
<shape>中子节点的常用属性:
<gradient>  渐变
Android:startColor  
    起始颜色
Android:endColor  
    结束颜色             
Android:angle  
    渐变角度,0从左到右,90表示从下到上,数值为45的整数倍,默认为0Android:type  
    渐变的样式 liner线性渐变 radial环形渐变 sweep
<solid >  填充
Android:color  
    填充的颜色
<stroke >描边
Android:width 
    描边的宽度
Android:color 
    描边的颜色
Android:dashWidth
    表示'-'横线的宽度
Android:dashGap 
    表示'-'横线之间的距离
<corners >圆角
Android:radius  
    圆角的半径 值越大角越圆
Android:topRightRadius  
    右上圆角半径
Android:bottomLeftRadius 
    右下圆角角半径
Android:topLeftRadius 
    左上圆角半径
Android:bottomRightRadius 
    左下圆角半径
<padding >填充
android:bottom="1.0dip" 
    底部填充
android:left="1.0dip" 
    左边填充
android:right="1.0dip" 
    右边填充
android:top="0.0dip" 
    上面填充
  1. Selector

根据不同的选定状态来定义不同的现实效果
分为四大属性:
android:state_selected 是选中
android:state_focused 是获得焦点
android:state_pressed 是点击
android:state_enabled 是设置是否响应事件,指所有事件
另:
android:state_window_focused 默认时的背景图片
引用位置:res/drawable/文件的名称.xml

使用:

<?xml version="1.0" encoding="utf-8" ?>       
<selector xmlns:Android="http://schemas.android.com/apk/res/android">     
<!-- 默认时的背景图片-->      
<item Android:drawable="@drawable/pic1" />        
<!-- 没有焦点时的背景图片 -->      
<item Android:state_window_focused="false" android:drawable="@drawable/pic_blue" />       
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->      
<item Android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic_red" />     
<!-- 触摸模式下单击时的背景图片-->      
<item Android:state_focused="false" Android:state_pressed="true" Android:drawable="@drawable/pic_pink" />      
<!--选中时的图片背景-->      
<item Android:state_selected="true" android:drawable="@drawable/pic_orange" />       
<!--获得焦点时的图片背景-->      
<item Android:state_focused="true" Android:drawable="@drawable/pic_green" />       
</selector>   
  1. layer-list

简介
将多个图片或上面两种效果按照顺序层叠起来

你可能感兴趣的:(Button、Shape、selector和layer-list)