自定義控制項 2 控制項例項

2021-06-26 07:44:47 字數 2740 閱讀 7548

舉個簡單的例子textview

對於常用的九宮格一般都是textview+imageview的樣式,可以直接使用textview並設定drawableright/top屬性的

但是有乙個缺點,drawable的寬高無法調整

網上的處理方法都是自定義類繼承textview,並進行一定的處理~

但是通常這樣的處理都是相對比較死板的, 最好是能夠封裝成乙個自定義控制項,直接在布局裡就利用引數設定寬高

下面就以此例子來熟悉自定義控制項的使用

首先在values/attrs.xml內新建乙個declare-styleable

這裡設定了兩個屬性,寬和高,為的是控制drawabletop..的大小

<?

xmlversion

="1.0"

encoding

="utf-8"

?>

<

resources

>

<

declare-styleable

name

="drawabletextview"

>

<

attr

name

="drawablewidth"

format

="dimension" 

/>

<

attr

name

="drawableheight"

format

="dimension"

/>

declare-styleable

>

resources

>

下面是類檔案的**

publicclassdrawabletextview

extendstextview }

if(drawable !=

null&& widthpx != -1 && heightpx != -1)

// 將放回到textview中

setcompounddrawables(drawables[0], drawables[1], drawables[2],

drawables[3]);

ta.recycle();}

publicdrawabletextview(context context, attributeset attrs)

publicdrawabletextview(context context)

} 其中紅色部分作用是,將自定義的attr引數與該自定義控制項繫結~

算是固定寫法

而自定義控制項所需的特殊邏輯就自行處理了,寫在控制項類的建構函式裡,

即上面兩個紅色部分之間的內容

比如我們例子所需的自定義textview drawableright/top的寬高

首先利用ta.

getdimensionpixelsize

方法獲取到自定義控制項中該引數對應的值~

此外還有ta.getint/ta.getcolor等放啊,對應attr中format設定的不同值型別

獲取到自定義控制項所需引數的值後,就可以根據需要進行處理了

,比如例子中所需的功能處理如下:

獲取陣列getcompounddrawables,陣列是因為textview繪圖分不同情況,

即drawableright drawabletop drawableleft drawablebottom四個,再

獲取到非空的那個,即我們在textview中設定的

利用drawable.setbounds方法,傳入x,y,width,height值進行的大小控制~ 最後

setcompounddrawables傳回去修改好後的drawable~

最後別忘了recycle**,結束~

好了,現在可以在布局檔案中使用檢視效果了

<

linearlayout

xmlns:android

=""

xmlns:tools

=""

=""

android:layout_width

="match_parent"

android:layout_height

="match_parent"

android:orientation

="vertical"

tools:context

=".mainactivity"

>

<

com.boredream.view.drawabletextview

android:layout_width

="wrap_content"

android:layout_height

="wrap_content"

android:drawableright

="@drawable/ic_launcher"

android:text=""

android:textsize

="130sp"

="130dp"

="130dp"

/>

linearlayout

>

自定義控制項(2)

自定義伺服器控制項屬性的特性 bindable 這個特性表示屬性是否可以繫結乙個有效資料來源。通常使用布林值進行設定。例如 bindable true 如果使用值true標記屬性,表示該屬性可以繫結乙個有效資料來源,且應引發該屬性的屬性更改通知。browsable 指定屬性是否應該在屬性瀏覽器中顯示...

自定義控制項分析2

使用xml和 動態獲取兩種新增屬性的方法。新增屬性使用xml註冊。然後是繼承view使用 public class customtext extends view string text int textcolor int textsize paint paint rect rect public ...

Android自定義控制項(2)

1 設定自定義控制項 android自帶的radiobutton只能存放text,這不符合我們的需求,我們需要乙個可以同時存放key value對應的鍵值。所以我們要編寫乙個自定義控制項能存放key value。設計思路 新建乙個類叫org.kandy.view.radiobutton,繼承自and...