三、自定义attr属性,指定方向

LinearLayout的orientation

orientation是支持横向和竖向的,且是直接写在布局里面的,那么我们自定义的话是怎么来实现呢?这里就要延伸出一个自定义属性的东西。

使用步骤

在attr.xml里面配置

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MineLineLayout">
        <attr name="android:orientation" format="integer">
            <enum name="horizontal" value="0" />
            <enum name="vertical" value="1" />
        </attr>
    </declare-styleable>
</resources>

这里面有format的类型有如下几个:

format类型说明
booleanattr是布尔类型的值,取值只能是true或false
stringstring类型
integerint整型(不含浮点型)
float浮点型(包含整型)
fraction表示百分数,只能以%号结尾
color代表颜色,可以使用#000000,也可以使用@color/white
dimension代表attr是尺寸类型.px/dp/sp结尾都可
referenceattr的值只能指向某一资源的ID
enum枚举值,只能取其中一个值
flag设置多个值,支持"|"操作符,不能在attr上设置format为flag,直接在attr节点下面添加flag节点即可

在代码里面获取

  1. 首先在xml里面使用一下.
    <com.jhzl.customview.MineLineLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@color/black"
        android:layout_gravity="center">

这里有个细节需要注意:
**android:orientation=“vertical”**就是我们在前面配置的attr里面的enum.

  1. MineLineLayout获取orientation
 public MineLineLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        //获取MineLineLayout所有attr里面的内容
        final TypedArray a = context.obtainStyledAttributes(
                attrs, R.styleable.MineLineLayout);
        //获取orientation
        int index = a.getInt(R.styleable.MineLineLayout_android_orientation, -1);
        if (index >= 0) {
            setOrientation(index);
        }
        //回收TypedArray
        a.recycle();
        Log.d(TAG,"orientation = "+index);
    }

打印结果:

MineLineLayout: orientation = 1 //和 <enum name="vertical" value="1" />里面的值一样
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值