关于android 控件的默认属性问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于android 控件的默认属性问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3271字,纯文字阅读大概需要5分钟。
内容图文
每个控件都有很多属性 而对于一些属性会有其默认值 而这些默认值是哪里来的?
我们会想到style或者theme 可往往我们使用TextView或者一些常用的控件的时候并没有声明 style属性 或者theme属性啊
下面以最常用的TextView来进行分析
我们知道 开发中缩写的xml 布局文件 最后都会被解析成为一个对象
势必会调用构造方法来创建对象
下面我们来看看TextView的构造方法
<span style="font-size:14px;"> 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); ....... }</span>
TextView 共有3个构造方法 android提供的控件 都会有3个构造方法
第一个构造方法 需要我们传入一个Context对象 一般用于在代码中创建对象
而第二三个构造方法 则是在xml解析成对象时调用
当控件没有指定style时调用第二个构造方法
指定了style时调用第三个
对于TextView 我们一般不指定style 此时就会调用第二个构造方法
<span style="font-size:14px;"> public TextView(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.textViewStyle); } </span>
可以看到这里调用了第三个构造方法
<span style="font-size:14px;">public TextView(Context context, AttributeSet attrs, int defStyle) {}</span>
分析一下参数:
context 是上下文环境 由系统提供
attrs 是解析xml文件中 控件的属性(id,layout_height等)得来的 可以视为一个容器
defStyle 是第二个构造函数传进来的
com.android.internal.R.attr.textViewStyle
可以看出这是一个id引用对象 在系统attr.xml文件中定义
<span style="font-size:14px;"> <!-- Default TextView style. --> <attr name="textViewStyle" format="reference" /></span>
由此可知当我们没有为控件指定style时 会使用一个默认style
那么这个默认style从哪来的啊 我们也并没有为这个textViewStyle设定值啊 ?
答案是 在activity的theme中指定了textViewStyle
<span style="font-size:14px;"> <style name="Theme"> <item name="textViewStyle">@android:style/Widget.TextView</item></span>
定义在了Theme中 而Theme是所有theme的基类 所以无论activity 的theme是什么 都可以找到textViewStyle
@android:style/Widget.TextView
这个表示引用系统style资源Widget.TextView
<span style="font-size:14px;"> <style name="Widget.TextView"> <item name="android:textAppearance">?android:attr/textAppearanceSmall</item> <item name="android:textSelectHandleLeft">?android:attr/textSelectHandleLeft</item> <item name="android:textSelectHandleRight">?android:attr/textSelectHandleRight</item> <item name="android:textSelectHandle">?android:attr/textSelectHandle</item> </style></span>
以上就是Textview的默认属性了
总结:
控件的默认值在style中指定
当不指定控件style 会使用默认的style
而默认的style的值则在theme中指定
下面分析
<span style="font-size:14px;">TypedArray a=context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextView, defStyle, 0);</span>
这个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的属性上
<span style="font-size:14px;"> 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);</span>
最后通过以上代码得到属性值
原文:http://blog.csdn.net/d342784178/article/details/46127391
内容总结
以上是互联网集市为您收集整理的关于android 控件的默认属性问题全部内容,希望文章能够帮你解决关于android 控件的默认属性问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。