Drawable下创建的xml文件的一些属性
1.shape 设置一些乍眼一看的属性,比如填充颜色,圆角样式,描边啥的
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--圆角-->
<corners android:radius="10dp"/>
<!--填充颜色-->
<solid android:color="@color/colorPrimary"></solid>
<!--描边-->
<stroke android:width="5dp"
android:color="@color/colorAccent"></stroke>
<!--内边距-->
<padding android:bottom="5dp"></padding>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--宽高-->
<size android:width="10dp"
android:height="10dp"></size>
<!--渐变-->
<gradient android:centerColor="@color/colorYellow"
android:startColor="@color/colorRed"
android:endColor="@color/colorYellow"></gradient>
</shape>
渐变和填充颜色不能同时使用。渐变可以是中心渐变,也可以起止不同的颜色来渐变,还有其他的方式
内边距是内部字体距离外部控件,此处是相对textView的距离。用的时候给控件设置一个背景,引用此文件 android:background="@drawable/shape"
2.selector设置点击选中点击效果
(1)android:state_pressed 按下和不按下的效果
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--按下背景颜色-->
<item android:drawable="@color/colorYellow"
android:state_pressed="true"></item>
<!--默认背景颜色-->
<item android:drawable="@color/colorRed"/>
</selector>
用的时候给控件设置一个背景,引用此文件 android:background="@drawable/selector_button_pressed"
(2)android:state_checked一般表示复选框的勾选以及未勾选状态
预先在drawable目录下准备两张图片,用于表示两种状态。然后drawable目录下新建xml文件,如下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--不选中时显示图片-->
<item android:drawable="@drawable/ic_launcher_background"
android:state_checked="false"></item>
<!--选中时显示图片-->
<item android:drawable="@drawable/ic_launcher_foreground"
android:state_checked="true"></item>
</selector>
然后CheckBox控件下定义如下,通过button属性把文件引进来
<CheckBox
android:id="@+id/checkbox0"
android:text="h"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/selector_state_selected"
/>
(3)android:state_selected 大部分控件可以用,需要在自己代码中设置选中未选中状态
在drawable目录下设置如下文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--不选中时显示图片-->
<item android:drawable="@drawable/ic_launcher_background"
android:state_selected="false"></item>
<!--选中时显示图片-->
<item android:drawable="@drawable/ic_launcher_foreground"
android:state_selected="true"></item>
</selector>
在ImageView控件下设置如下属性,一个背景
android:background="@drawable/selector_state_selected"
在MainActivity中添加如下图片的点击事件
final ImageView imageView=(ImageView)findViewById(R.id.imageView);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//设置状态,取反,设置取反后的状态
imageView.setSelected(!imageView.isSelected());
}
});
这里的叹号我之前没写,想的是反正两种状态,取不取反区别不大。但实际上设置状态是通过获取当前状态来改变的,如果没有叹号,会一直把当前状态重新设置一遍,而不是取反状态设置,所以就会出现怎么点击都不变化的状态。
3.layer-list 把item按顺序层叠显示
drawable定义xml文件
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
<shape android:shape="rectangle" >
<solid android:color="#0000ff"/>
</shape>
</item>
<item android:bottom="25dp" android:top="25dp" android:left="25dp" android:right="25dp">
<shape android:shape="rectangle" >
<solid android:color="#00ff00" />
</shape>
</item>
<item android:bottom="50dp" android:top="50dp" android:left="50dp" android:right="50dp">
<shape android:shape="rectangle" >
<solid android:color="#ff0000" />
</shape>
</item>
</layer-list>
把textView定义如下,通过背景引用
<TextView
android:text="hello"
android:paddingLeft="50dp"
android:background="@drawable/layer_list_textview"
android:layout_width="150dp"
android:layout_height="150dp" />
如果把TextView宽高都设置为wrap_context,显示的效果是只有一层,里面包裹文字,而不是预想的三层形式。从网上看代码,把宽高设置一个指定的数值,比如150,三层就能完美地显现出来。这是由于
android:bottom=“50dp” android:top=“50dp” android:left=“50dp” android:right="50dp"这些属性是相对控件的距离,比如android:bottom="50dp"就是相对TextView底部边缘50dp的位置。如果控件定义的不够大,自然显示不出来。
整理自:安辉 《Android App开发从入门到精通》