个人理解以及个人的总结,希望能帮助大家,也可以给些宝贵的意见。
在我们android 的设计开发的过程中,我们很多的布局都可能会用到drawable中自定义的xml文件,来实现我们的一些效果的显示。
我经常用到的有图形化的圆角的自定义,以及点击切换背景色或者背景图片等,有时候会用到selector,有时候用到shape,还有时候要结合使用。
下面通过代码来进行一定的解释吧。
1.关于点击切换背景图片的selector:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mipmap/connect_pre" android:state_pressed="true"></item> <item android:drawable="@mipmap/connect_pre" android:state_focused="true"></item> <item android:drawable="@mipmap/connect"></item> </selector>通过上面可以很清晰的看出来,通过对你当前控件的状态的判断,来进行一个背景的设置,如果你当前的状态是pressed="true",也就是按下的状态,那么drawable显示一个图片。如果是focused="true",也就是你当前的状态是获取焦点的状态。还有没有设置状态的,也就是不是处于触发状态的,原始状态设置一个背景图片。最后,在自己使用到的控件中将background设置成自己这个selector的名字。有基础的同学应该可以理解了。
2.对背景色的切换selector:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/clear_pre" android:state_pressed="true"></item> <item android:drawable="@drawable/clear_pre" android:state_focused="true"></item> <item android:drawable="@drawable/clear_normal"></item> </selector>同样的不解释,主要说明一下drawable中的clear_pre和clear_normal中的内容,这俩背景色也是自己定义的背景色。
clear_pre.xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#ffffff"/> </shape>clear_normal.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#4c4c4c"/> </shape>
这就是两个drawable的文件引用,里面用到了shape,我们一个一个说,缺少的东西,后面会给总结上面尽量的补充上。
solid:这个标签,就是填充。
而我们solid中的android:color属性则是填充的颜色。
这样就能实现我们背景色的切换,根据当前控件的状态来实现。
3. selector和shape的结合使用:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <solid android:color="#ffffff" /> <corners android:radius="30dp" /> <padding android:bottom="20dp" android:left="20dp" android:right="20dp" android:top="20dp" /> </shape> </item> <item android:state_focused="true"> <shape> <solid android:color="#ffffff" /> <corners android:radius="30dp" /> <padding android:bottom="20dp" android:left="20dp" android:right="20dp" android:top="20dp" /> </shape> </item> <item> <shape> <solid android:color="#404040" /> <corners android:radius="30dp" /> <padding android:bottom="20dp" android:left="20dp" android:right="20dp" android:top="20dp" /> </shape> </item> </selector>
首先先观看我们的格式,最外层是我们的selector,然后,在selector中就是item标签,item标签中,包含我们的状态判定,当前状态是pressed还是focused还是normal状态。
然后item标签下就是我们的shape,对我们的当前状态的控件进行图形化的自定义。
solid:填充,包括颜色
corners:圆角,包括圆角的半径,半径越大,角越圆
padding:内边距.
还涉及到一些别的属性,这里我们也总结一下,不全面的地方,希望大家能够给予批评:
shape中的一些常用属性: