2KB项目,专业的源码交易网站 帮助 收藏 每日签到

如何在 Android 应用程序中使用自定义主题

  • 时间:2019-01-23 18:44 编辑:2KB 来源:2KB.COM 阅读:375
  • 扫一扫,手机访问
  • 分享
摘要:
Android 英文原文:How to apply a custom theme to an Android application 自从Android4.0发布以来,我们已经看到越来越多的应用程序遵循新的  Android设计指南。该指南介绍了Android的holo主题,并提供了一个既有现代感又独特的用户体验。从今年的谷歌开发者大会谈论的“  成功的Android设计”上,我们得到了一些重要的心得: 

 

对于这篇文章,我假设你已经有“成功设计”的部分,所以让我们走进更高一层的“应用涅槃”。更具体地说,我将描述一些有用的模式应用到你的应用程序中,让你的应用更具品牌化。 

简单样式 

在Android中,定义外观最简单的方式是直接设置属性在视图对象上。由于要对整个应用程序设置样式,这种方法就显得不是很方便了。因此,我们可以创建样式来绑定视图属性。但要注意的是,样式只能设置在xml里。这意味着,我们在创建/加载视图的时候,只能一次设置一个样式。下面是如何在res/values/styles.xml文件中给TextView设置属性的示例。

<style name="CustomText" parent="<a href="http://my.oschina.net/asia" target="_blank" rel="nofollow">@android</a> :style/TextAppearance.Medium"> 
<item name="android:textSize">20sp</item> <item name="android:textColor">#008</item> 
</style>

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

创建主题绑定样式 

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

<style name="Theme.MyApp" parent="<a href="http://my.oschina.net/asia" target="_blank" rel="nofollow">@android</a> :style/Theme.Holo"> 
<item name="android:textAppearance">@style/CustomText</item> 
</style>


如上所述,主题是样式资源本身,所以我们声明一个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代码中的混乱,完全可以投入到应用程序的逻辑。 

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部