注:該筆記是整理學習鴻洋大神自定義view系列部落格的部分知識點。
一、typedarray 與 attributeset 獲取 view 屬性的區別
attributeset獲取方式:
typedarray獲取方式:public
mytextview(context context, attributeset attrs)
}
public mytextview(context context, attributeset attrs)
當布局檔案這樣設定屬性時:
輸出的結果為:.example
.test
.mytextview
android:layout_width="@dimen/dp100"
android:layout_height="@dimen/dp200"
zhy:testattr="520"
zhy:text="@string/hello_world" />
結論:typedarray其實是用來簡化我們的工作的,比如上例,如果布局中的屬性的值是引用型別(比如:@dimen/dp100),如果使用 attributeset 去獲得最終的畫素值,那麼需要第一步拿到 id,第二步再去解析id。而 typedarray 正是幫我們簡化了這個過程。mytextview(4692): attrname = layout_width , attrval = @2131165234
mytextview(4692): attrname = layout_height , attrval = @2131165235
***mytextview(4692): attrname = text , attrval = @2131361809
***mytextview(4692): attrname = testattr , attrval = 520
>>use typedarray
***mytextview(4692): text = hello world! , textattr = 520
***
二、如果系統中已有明確的屬性,能不能在 view 屬性定義時直接使用
解答:
可以直接使用,使用方式:
在類中這麼獲取:ta.getstring(r.styleable.test_android_text);布局檔案中直接android:text=」@string/hello_world」即可。/** 注意宣告和使用的區別,差別就是有沒有format */
"test">
"android:text" />
"testattr" format="integer" />
三、能不能在 view 屬性定義時,不使用 declare-styleable 標籤
解答:
可以不使用,但是當在類中獲取屬性值時,需要在宣告乙個 int 陣列,用於儲存 attr 的 id,並且我們根據元素的在陣列中的位置,定義了一些整形的常量代表其下標,然後通過typedarray進行獲取。所以建議使用。
例如:
attrs.xml
mytextview類<?xml version="1.0" encoding="utf-8"?>
name="testattr"
format="integer" />
resources>
public
class
mytextview
extends
view ;
private
static
final
int attr_android_text = 0;
private
static
final
int attr_testattr = 1;
public
mytextview(context context, attributeset attrs)
}
自定義View理解
整合view view流程 onmeasure 在這個方法裡指定自己的寬高 ondraw 繪製自己的內容 整合viewgroup viewgroup流程 onmeasure 指定自己的寬高,所有子view的寬高 onlayout 擺放所有子view ondraw 繪製內容 widthmode mea...
自定義view 二
自定義view的最重要的乙個部分是自定義它的外觀。根據你的程式的需求,通過ondraw方法實現繪製。在ondraw中,會傳遞給你乙個canvas。canvas封裝了繪製圖形的方法。還需要自定義乙個 paint去定義顏色樣式的填充 簡單來說 canvas定義你在螢幕上畫的圖形,而paint定義顏色,樣...
自定義View筆記
1.帶刪除按鈕的listview 將觸控事件交給手勢處理器處理 return gesturedetector.ontouchevent event override public boolean ondown motionevent e return false override public vo...