Android中的属性,是怎么应用到控件上的(四)
来源:互联网 发布:300英雄皮肤cdk 淘宝 编辑:程序博客网 时间:2024/06/05 18:19
还有些问题
1、如果不在Application里设置Theme也会有风格出现为什么?
2、Theme和Style有什么区别。
会到这个函数
final TypedArray a = context.obtainStyledAttributes( attrs, R.styleable.Spinner, defStyleAttr, defStyleRes);
属性应用的最关键还是这个函数
/** * Retrieve styled attribute information in this Context's theme. See * {@link android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)} * for more information. * * @see android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int) */ public final TypedArray obtainStyledAttributes( AttributeSet set, @StyleableRes int[] attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { return getTheme().obtainStyledAttributes( set, attrs, defStyleAttr, defStyleRes); }可以看到是先getTheme(),应该就是获取them的方法了,点击去,
/** * Return the Theme object associated with this Context. */ @ViewDebug.ExportedProperty(deepExport = true) public abstract Resources.Theme getTheme();
是一个Context的抽象方法,去看具体实现类就Activity把。
Activity extends ContextThemeWrapper再去看ContextThemeWrapper
@Override public Resources.Theme getTheme() { if (mTheme != null) { return mTheme; } mThemeResource = Resources.selectDefaultTheme(mThemeResource, getApplicationInfo().targetSdkVersion); initializeTheme(); return mTheme; }
找到这个函数,如果我不设置风格的话 就会selectDefaultTheme(),在Resources中找到
public static int selectDefaultTheme(int curTheme, int targetSdkVersion) { return selectSystemTheme(curTheme, targetSdkVersion, com.android.internal.R.style.Theme, com.android.internal.R.style.Theme_Holo, com.android.internal.R.style.Theme_DeviceDefault, com.android.internal.R.style.Theme_DeviceDefault_Light_DarkActionBar); }继续
/** @hide */ public static int selectSystemTheme(int curTheme, int targetSdkVersion, int orig, int holo, int dark, int deviceDefault) { if (curTheme != 0) { return curTheme; } if (targetSdkVersion < Build.VERSION_CODES.HONEYCOMB) { return orig; } if (targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { return holo; } if (targetSdkVersion < Build.VERSION_CODES.N) { return dark; } return deviceDefault; }结果就是,会根据SDK的版本来给选择一个风格加上,不会存在没有风格的现象出现。
在源码的Values文件夹下
问题得到解决
1、不设置Theme,会根据使用SDK的版本来设置Theme
2、Theme和XXXStyle没有区别,都是属性的集合。
(XML 使用原理 Thinking in java 第4版 586页,书中使用XOM类库解析,大概就是像遍历树一样,从上到下分级解析)
总之:我认为android的XML只是android便于管理资源文件的一个工具,归根结底还是在java中把这些XML解析出来使用,不用XML也可以,只是不方便吧。
阅读全文
0 0
- Android中的属性,是怎么应用到控件上的(四)
- Android中的属性,是怎么应用到控件上的(一)
- Android中的属性,是怎么应用到控件上的(二)
- Android中的属性,是怎么应用到控件上的(三)
- w3c系列之CSS(三):CSS属性是如何被应用到元素上的
- j2ee的web项目,中文怎么被保存到数据库中的(其实最终是保存在计算机上的)
- Android 控件属性详解(四)
- 菜鸟是怎么练成的(四)
- 搜狗云输入法是怎么飘到网页页面上的?
- 王学岗属性动画上(四)------ValueAnimator的应用
- platform_driver 中的 .remove 是怎么被调用到的
- Android的EditText控件点击虚拟键盘上的回车怎么跳到下一个EditText继续输入呢?
- 同事问到C#中的属性(Property)怎么理解?
- React Native是怎么在Android上跑起来的
- Android控件组合应用四
- Android控件组合应用四
- 四、Android中控件的继承 通用行为和属性
- 鼠标在slide控件的任意位置上点击,滑块滑动到该位置是如何实现的,有什么属性吗?
- 1011: Watermelon
- JAVA-TreeSet集合
- 集体智慧编程中文版pdf
- Hbase列族数据库(基本存储结构)
- 均线
- Android中的属性,是怎么应用到控件上的(四)
- Elsevier和ScienceDirect
- ftp的搭建
- 父与子的编程之旅:与小卡特一起学Python.pdf
- PostgreSQL数据库、表空间、角色及用户
- 决策树—基本原理与实战
- linux从入门到精通(第2版)pdf
- (贪心算法)HDU 2037 今年暑假不AC
- 罚款单,电信该被罚款4900亿人民币