舉個簡單的例子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...