设为首页 加入收藏

TOP

如何在 Android 应用程序中使用自定义主题
2014-11-24 11:25:10 来源: 作者: 【 】 浏览:1
Tags:何在 Android 应用程序 使用 定义 主题

我们引用@style/CustomText样式应用在我们的layout.xml文件中。该样式引用了一个父样式 @android:style/TextAppearance.Medium。由于开始样式引自android: 命名空间,那么我们这个样式默认也随android平台。


创建主题绑定样式


假设我们要改变我们所有TextView的文字大小和颜色,并且不需要明确设置每一个TextView。这是一个非常常见的情况,幸运的是,Android提供了一个非常强大的主题机制。从本质上讲,主题就是样式资源本身,使用“key”指向具体的样式。一个视图对象基于这个key可以查看到具体的样式。下面是一个简单的例子,在res/values/themes.xml文件:


如上所述,主题是样式资源本身,所以我们声明一个Theme.App继承自Android平台提供的holo主题。我们将我们的CustomText样式指定到android:textAppearance属性。属性就是一个预定义的“变量”,它可以被其他资源元素引用。事实上,它也可以创建自定义属性在res/values/attr.xml文件。


现在有趣的事情来了。我们的主题Theme.MyApp不仅可以通过AndroidManifest.xml的设置应用到Activity上,它也可以在运行时在代码中设置。你将不得不重新启动当前Activity(或使用ContextWrapper应用UI的主题部分),但它使主题更加动态。


如何找出视图上的样式属性


主题最常见的问题是要找出哪些属性适用于哪一个视图。唯一可靠的方法,在所有情况下,看看视图源码是否有我们要的主题。下面是Android API等级16(果冻豆)TextView类的代码片段。这段代码在构造函数中执行(代码段落被省略)。


final Resources.Theme theme = context.getTheme();
TypedArray a = theme.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextViewAppearance, defStyle, 0);
int ap = a.getResourceId(com.android.internal.R.styleable.TextViewAppearance_textAppearance, -1);
TypedArray appearance = theme.obtainStyledAttributes(ap, com.android.internal.R.styleable.TextAppearance);
textColor = appearance.getColorStateList(attr);


该代码片段显示了文本的颜色是如何从当前主题的TextAppearance属性提取出来的。通过阅读这段初始化代码,我们通常可以知道什么样的元素可以被配置。

我们必须意识到,虽然不同的Android版本应用不同的属性,但Android高版本通常支持低版本的属性,新属性显然不被低版本识别。我希望我们会很快得到更新检查,这样就能引用Android新版本推出的主题属性。

总结

Android4.0的主题变得更加强大了,98%属性你可以通过代码设置,并且现在可以在主题化之前设置样式。使用自定义主题时,除了有更大的视觉灵活性,你还可以减少在XML布局和Java代码中的混乱,完全可以投入到应用程序的逻辑。


英文原文


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java中的属性以及基本数据类型 下一篇iOS开发教程之动态添加Button和监..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 数据分析与可 (2025-12-26 21:51:20)
·从零开始学Python之 (2025-12-26 21:51:17)
·超长干货:Python实 (2025-12-26 21:51:14)
·为什么 Java 社区至 (2025-12-26 21:19:10)
·Java多线程阻塞队列 (2025-12-26 21:19:07)