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類型 | 說明 |
---|---|
boolean | attr是布爾類型的值,取值隻能是true或false |
string | string類型 |
integer | int整型(不含浮點型) |
float | 浮點型(包含整型) |
fraction | 表示百分數,隻能以%号結尾 |
color | 代表顔色,可以使用#000000,也可以使用@color/white |
dimension | 代表attr是尺寸類型.px/dp/sp結尾都可 |
reference | attr的值隻能指向某一資源的ID |
enum | 枚舉值,隻能取其中一個值 |
flag | 設定多個值,支援"|"操作符,不能在attr上設定format為flag,直接在attr節點下面添加flag節點即可 |
在代碼裡面擷取
- 首先在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.
- 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);
}
列印結果: