写的第一篇博文竟是关于安卓的,学了两年的ACM,都是看别人的博客,没有记录过自己的学习心得,确实也是遗憾
安卓学了几天,对UI比较感兴趣;
今天遇到个关于按钮设计的问题,跟大家分享一下.
给button设置一个selector,让按钮背景正常状态下是一个颜色值,点击状态下背景又是另外一个值,但是没想到报了这样一个错误<item> tag requires a 'drawable' attribute or child tag defining a drawable(不能直接用color属性),既然background只能设置为drawable,那我就写一个drawable的selector给button设置不同状态下的颜色值,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">//定义当button 处于pressed 状态时的形态。
<shape>
<gradient android:startColor="#0000ff" />
<stroke android:width="2dp" android:color="#000000" />
<corners android:radius="5dp" />
<padding android:left="10dp" android:top="10dp"
android:bottom="10dp" android:right="10dp"/>
</shape>
</item>
<item android:state_focused="true">//定义当button获得 focus时的形态
Log.d("dfd","dfd1");
<shape>
<gradient android:startColor="#aad100"/>
<stroke android:width="2dp" android:color="#000000"/>
<corners android:radius="8dp" />
<padding android:left="10dp" android:top="10dp"
android:bottom="10dp" android:right="10dp"/>
</shape>
</item>
<item android:state_pressed="true">//定义当button获得 focus时的形态
<shape>//按钮点击显示
<gradient android:startColor="#2e7d32"/>//背景色
<stroke android:width="2dp" android:color="#333333"/>//边框色
<corners android:radius="8dp" />
<padding android:left="10dp" android:top="10dp"
android:bottom="10dp" android:right="10dp"/>
</shape>
</item>
<item android:state_enabled="true">//按钮初始显示
<shape>
<gradient android:startColor="#ffffff"/>//背景色
<stroke android:width="2dp" android:color="#2e7d32"/>//边框色
<corners android:radius="8dp" />
<padding android:left="10dp" android:top="10dp"
android:bottom="10dp" android:right="10dp"/>
</shape>
</item>
</selector>
然后发现界面运行后按钮显示的时state_enable="true"里的颜色,当点击按钮时显示的是state_pressed="true"时的颜色.
然后上网搜了一下,发觉代码还可以写成这样:
<?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="@color/black"/>
<!-- 设置边框宽度为1dp,边框颜色为白色 -->
<stroke android:width="1dp" android:color="@color/white" />
<!-- 设置按钮圆角半径为5dp -->
<corners android:radius="5dp" />
<!-- 设置按钮中间文字距上下左右都为10dp的间距 -->
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
<!-- 正常状态下(非点击)的效果 -->
<item android:state_pressed="false">
<shape>
<!-- 设置背景填充色为白色 -->
<solid android:color="@color/white"/>
<!-- 设置边框宽度为1dp,边框颜色为黑色 -->
<stroke android:width="1dp" android:color="@color/black" />
<!-- 设置按钮圆角半径为5dp -->
<corners android:radius="5dp" />
<!-- 设置按钮中间文字距上下左右都为10dp的间距 -->
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
</selector>
只运用了state_pressed="true"和state_pressed="false";