Drawable下创建的xml文件的一些属性

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开发从入门到精通》

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值