編輯:關於Android編程
每個控件都有很多屬性 而對於一些屬性會有其默認值 而這些默認值是哪裡來的?
我們會想到style或者theme 可往往我們使用TextView或者一些常用的控件的時候並沒有聲明 style屬性 或者theme屬性啊
下面以最常用的TextView來進行分析
我們知道 開發中縮寫的xml 布局文件 最後都會被解析成為一個對象
勢必會調用構造方法來創建對象
下面我們來看看TextView的構造方法
public TextView(Context context) { this(context, null); } public TextView(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.textViewStyle); } @SuppressWarnings("deprecation") public TextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); ..... TypedArray a = context.obtainStyledAttributes( attrs, com.android.internal.R.styleable.TextView, defStyle, 0); ....... }
第一個構造方法 需要我們傳入一個Context對象 一般用於在代碼中創建對象
而第二三個構造方法 則是在xml解析成對象時調用
當控件沒有指定style時調用第二個構造方法
指定了style時調用第三個
對於TextView 我們一般不指定style 此時就會調用第二個構造方法
public TextView(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.textViewStyle); }
可以看到這裡調用了第三個構造方法
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
總結:
控件的默認值在style中指定
當不指定控件style 會使用默認的style
而默認的style的值則在theme中指定
下面分析
TypedArray a=context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextView, defStyle, 0);
我們知道 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);
Android 中使用ExpandableListView 實現分組一個視圖顯示垂直滾動兩級列表中的條目。這不同於列表視圖,允許兩個層次,類似於QQ的好友分組
Android UI- PullToRrefresh自定義下拉刷新動畫 如果覺得本文不錯,麻煩投一票,2014年博客之星投票地址:http://vote.blog.csd
現在的智能手機不敢說百分百的都是觸摸屏,也應該是百分之九九以上為觸摸屏了,觸摸屏為我們操作無鍵盤、無鼠標的手機系統帶來了很多的便利。當用戶觸摸屏幕時會產生很多
Android RadioButton 圖片位置與大小Java:rgGroup = (RadioGroup) findViewById(R.id.re_group);