看了 這篇部落格後,自己對自定義控制項做的一些總結。
關於自定義控制項的建立,主要分為以下幾個步驟:
1. 在value資料夾下,建立attrs.xml檔案,在其中宣告 自定義控制項的名字以及各種屬性。
2. 建立自定義控制項的類檔案,通常是繼承view。重寫其中的幾個方法
a.在建構函式中,通過typearray獲取控制項的所有屬性,進行畫筆paint以及其他一些屬性初始化,獲取完畢後需要進行recycle。
在設定字型屬性的時候,涉及單位轉換,可以使用:
titletextsize = a.getdimensionpixelsize(
attr, (int
typedvalue.complex_unit_sp, 25
, getresources().getdisplaymetrics()));
//預設標題字型大小25sp
b.重寫onmeasrue方法,這個方法的作用主要是用於計算出自定義控制項的寬和高。
一般都要先獲取控制項在布局檔案layout中自己設定的模式及寬高。(這是我自己的理解)
通過int widthmode = measurespec.getmode(widthmeasurespec);
int widthsize = measurespec.getsize(widthmeasurespec);
int heightmode = measurespec.getmode(heightmeasurespec);
int heightsize = measurespec.getsize(heightmeasurespec);
模式有3中,exactly(具體的android:layout_width="200dp"),
up_most(具體的android:layout_width="wrap_content"),
unspecified(
具體的不太懂 ,想多大 就多大
),其中的一些方法:
fontmetrics,用於獲取字型屬性panit.getfontmetrics
textutils.ellipsize,用於獲取text中的文字資訊。string msg = textutils.ellipsize(subtitletext, textpaint, right - left, textutils.truncateat.end).tostring();
c.重寫ondraw方法,進行自定義控制項的繪製。
其中的一些方法:
canvas.drawtext(msg, x, bottom - fm.descent, paint);繪製文字。
canvas.drawbitmap(imagebitmap, null, rect, paint);繪製。
d.設定一些介面,可以通過介面對自定義的屬性進行修改。
3.在布局檔案中使用自定義控制項,在開頭進行宣告。
4.關於自定義控制項的3個構造方法
在**裡new的話一般用乙個引數的,
寫在xml裡的 呼叫2個引數的 attr裡邊傳過來的是 xml裡邊對應的height width等引數,包括自己定義的引數,如果在xml裡邊寫入自定義控制項的話 必須要重寫2個引數的
建構函式
public myview(context context, attributeset attrs)
第3個引數不熟,傳style的吧貌似
如果在code中例項化乙個view會呼叫第乙個建構函式,如果在xml中定義會呼叫第二個建構函式,而第三個函式系統是不呼叫的,要由view(我們自定義的或系統預定義的view,如此處的customtextview和button)顯式呼叫,比如在這裡我們在第二個建構函式中呼叫了第三個建構函式,並將r.attr.customizestyle傳給了第三個引數。
自己總結的一些,不知道對不對,有問題歡迎指出。
Android自定義控制項 基礎(五)
android開發中難免遇到需要自定義控制項的需求,有些是產品的要求在android標準控制項庫中沒有滿足要求的,有些是開發過程中沒有 的可復用,自己定義的。android已經提供了一系列基礎控制項和xml屬性來幫助你建立自定義控制項。view在android是最基礎的幾個控制項之一,所有的控制項均...
Android 自定義控制項
幹android也有一段的時間了,自定義這塊的東西覺得還是很有比較複習一下基礎的東西。自定義控制項和自定義元件基本上的使用都是在專案中基本的android控制項滿足不了需求的時候使用的。所以,如果要高出特別炫的特效,或者比較特殊的控制項排列方式,例如瀑布流,那麼就要好好學學自定義咯。首先,先簡單的介...
android自定義控制項
android自定義控制項 二 入門,繼承view 說說android 兩種為自定義元件新增屬性的使用方法和區別 自定義控制項的屬性 自定義控制項 今天花了3,4個小時看了自定義控制項,看 懂了,還沒有實踐,因為時間不夠,日後實踐。總結下 自定義控制項有3種方式 繼承已有控制項 繼承乙個容器控制項,...