關於android 控制項的預設屬性問題

2021-07-02 22:14:08 字數 2263 閱讀 9776

每個控制項都有很多屬性 而對於一些屬性會有其預設值  而這些預設值是**來的?

我們會想到style或者theme 可往往我們使用textview或者一些常用的控制項的時候並沒有宣告 style屬性 或者theme屬性啊

下面以最常用的textview來進行分析

我們知道 開發中縮寫的xml 布局檔案 最後都會被解析成為乙個物件     

勢必會呼叫構造方法來建立物件

下面我們來看看textview的構造方法

public textview(context context) 

public textview(context context,

attributeset attrs)

@suppresswarnings("deprecation")

public textview(context context,

attributeset attrs,

int defstyle)

textview 共有3個構造方法         android提供的控制項 都會有3個構造方法

第乙個構造方法 需要我們傳入乙個context物件 一般用於在**中建立物件

而第二三個構造方法   則是在xml解析成物件時呼叫

當控制項沒有指定style時呼叫第二個構造方法

指定了style時呼叫第三個

對於textview 我們一般不指定style 此時就會呼叫第二個構造方法

public textview(context context,

attributeset attrs)

可以看到這裡呼叫了第三個構造方法

public textview(context context,

attributeset attrs,

int defstyle) {}

分析一下引數:

context   是上下文環境    由系統提供

attrs   是解析xml檔案中 控制項的屬性(id,layout_height等)得來的 可以視為乙個容器

defstyle 是第二個建構函式傳進來的

com.android.internal.r.attr.textviewstyle

可以看出這是乙個id引用物件 在系統attr.xml檔案中定義

由此可知當我們沒有為控制項指定style時 會使用乙個預設style

那麼這個預設style從哪來的啊 我們也並沒有為這個textviewstyle設定值啊 ?

答案是 在activity的theme中指定了textviewstyle

以上就是textview的預設屬性了

總結:

控制項的預設值在style中指定

當不指定控制項style  會使用預設的style

而預設的style的值則在theme中指定

下面分析

typedarray a=context.obtainstyledattributes(attrs, com.android.internal.r.styleable.textview, defstyle, 0);

這個obtainstyledattributes可以理解為使用attrs 和defstyle 對com.android.internal.r.styleable.textview中的屬性進行解析

我們知道 attrs是xml布局檔案中控制項指定的屬性值 而defstyle 是style中指定屬性值

而com.android.internal.r.styleable.textview 是在scheme中即attrs.xml中定義的屬性

所以把attrs 和defstyle的值匹配到com.android.internal.r.styleable.textview的屬性上

mthumbdrawable = a.getdrawable(r.styleable.switch_thumb);

mtrackdrawable = a.getdrawable(r.styleable.switch_track);

mtexton = a.gettext(r.styleable.switch_texton);

mtextoff = a.gettext(r.styleable.switch_textoff);

最後通過以上**得到屬性值

React中的屬性校驗和預設屬性

一,在react中props是元件對外暴露的介面,但通常元件並不會明顯的申明他會暴露那些介面及型別,這不太利於元件的復用,但比較好的是react提供了proptypes這個物件用於校驗屬性的型別,proptypes包含元件屬性的所有可能型別,以下我們通過乙個示列來說明 物件的key是元件的屬性名,v...

Android的控制項

一 textview 顯示文字的控制項 1 android text設定文字框內文字內容 2 android autolink是否將符合指定格式的文字轉換為可單擊的超連結形式 取值範圍 none web email phone map all 3 android singleline為true文字框...

Android常用的控制項

常用控制項例項介紹 幫助你更快的入門android 1 android初級控制項的使用 textview控制項的使用 button控制項的使用方法 edittext控制項的使用方法 imageview的使用方法 radiobutton的使用方法 checkbox的使用方法 menu的使用方法 2 a...