來寫一個簡單的自定義View,熟悉一下自定義view的流程

上面每一個item,看上去好像都是一個horizontal的LinearLayout裝載了兩個ImageView,一個textView,但是這樣寫未免太麻煩了,這個布局可以只用一個textview實(shí)現(xiàn),但是如果自定義一個這樣的view該怎么寫呢。

首先建一個class,繼承LinearLayout并給出構(gòu)造方法:

```

class SettingItemLayout extends LinearLayout{

public SettingItemLayout(Context context,@NullableAttributeSet attrs) {

super(context,attrs);

initLayout(context,attrs);//這個方法用來初始化布局

}

}

```

這時候就要考慮自定義的這個view里面都有些啥東西:

```

ImageView imgLeft;//左邊的圖標(biāo)

TextView tv;//文字

privateImageViewimg_tip;//右邊的跳轉(zhuǎn)圖標(biāo)

```

有了上面三個變量,這個布局就成型了,但是左邊這個圖標(biāo)需要我們動態(tài)設(shè)置,所以還要聲明一個變量用來從外部設(shè)置圖片資源

```

Drawable drawable;//設(shè)置的圖片標(biāo)資源

private intmHeight,mWidth;//圖標(biāo)的寬、高

```

而以上三個變量的值,就需要用到一個東西:attrs(這個位于values下面,名稱不一定是attrs你可以隨便取,但是大家都取attrs),來看看這個里面有什么:

里面有四個值,分別對應(yīng)標(biāo)題的名字,圖標(biāo)的資源文件,圖標(biāo)寬高。關(guān)于format:

```

1. reference:參考某一資源ID。如:@drawable/ic_laucher

2. color:顏色值。

3. boolean:布爾值。

4. dimension:尺寸值。

5. float:浮點(diǎn)值。用法:android:fromAlpha ="1.0 ?"android:toAlpha ="0.7"

6. integer:整型值。用法:android:frameDuration ="100"

7. string:字符串。

8. fraction:百分?jǐn)?shù)。用法:android:pivotX ="200%"

9. enum:枚舉值。

```

定義一個屬性可以指定多個類型,比如背景,可以指定資源也可以指定具體的顏色值:

```

<attr name ="background"format ="reference|color"/>

定義一個初始化的方法:initLayout(context,attrs);

private void initLayout(Context context,@NullableAttributeSet attrs) {

View.inflate(context,R.layout.base_menu_item_layout, this);//將布局文件加載進(jìn)來,第三個參數(shù)this指裝載這個布局的父容器

imgLeft= (ImageView) findViewById(R.id.img_myzne);

img_tip= (ImageView) findViewById(R.id.img_tip);

tv= (TextView) findViewById(R.id.tv);

TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.base_menu_item);

String title = typedArray.getString(R.styleable.base_menu_item_menu_item_name);

drawable= typedArray.getDrawable(R.styleable.base_menu_item_drawableleft_src);

mWidth=typedArray.getDimensionPixelSize(R.styleable.base_menu_item_drawableleft_width,0);

mHeight=typedArray.getDimensionPixelSize(R.styleable.base_menu_item_drawableleft_height,

0);

//這個必須調(diào)用

typedArray.recycle();

//然后將獲取到的標(biāo)題和圖標(biāo)資源設(shè)置到控件上

tv.setText(title);

imgLeft.setImageDrawable(drawable);

}

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容