所有Android设备都具有一致的UI颜色

时间:2011-05-01 19:00:07

标签: android

我注意到UI颜色(例如按钮背景/文本颜色)根据设备中使用的当前主题,从设备到设备的所有更改。

为Android应用程序应用自定义UI颜色的最佳做法是什么,以便我在所有Android设备中为我的应用程序设置相同的颜色方案。我可以在UI项目上设置文本/背景颜色。我想知道是否有一个地方可以定义所有颜色,这些颜色将覆盖手机上应用的当前主题。

THX。

2 个答案:

答案 0 :(得分:5)

是的,您可以在一个地方为应用定义这些值。请参阅Android文档中的Styles and Themes了解其工作原理。

样式只是值与预定义名称的映射。如果您发现自己在布局中重复了许多常见属性,则可以将其分解为样式。例如,您可能有一种特殊的按钮样式,用于定义特定的背景和文本颜色。

主题是一种元风格。它可以通过AndroidManifest.xml应用于Activity甚至整个应用程序。除此之外,它还定义了控件的外观和值的默认样式,以及控制UI外观的其他部分。

当您尝试在应用程序的其他自定义UI中融入系统时,您可以查询当前主题的值。就像在引用系统资源时使用@引用语法@android:drawable/foo一样,当您想要使用存储在系统主题属性{{1}中的值时,可以使用语法?android:attr/foo }}

在您的情况下,如果要更改应用中的主要文字颜色,请应用设置属性foo的自定义主题。如果您只是想确保应用的某个元素使用运行该应用的设备定义的主要文字颜色,则可以设置textColorPrimary。同样的原则也适用于其他地方。

如果您想查看系统中使用的属性,则将它们定义为此文件中Android框架的一部分:frameworks/base/core/res/res/values/attrs.xml。查看顶部的XML元素android:textColor="?android:attr/textColorPrimary"的子元素。要查看系统设置这些内容的示例,请参阅同一目录中的themes.xml。最后,并非所有这些属性都是公共的 - 应用程序无法设置非公共属性,它们是Android框架的实现细节。有关可在应用中使用的属性的完整列表,请参阅public.xml

答案 1 :(得分:1)

最佳做法是apply a custom theme到您的应用程序,并根据需要覆盖尽可能多的默认属性。

几乎所有事情都可以改变,除了

  • Menu
  • AlertDialog的某些属性(可以使用自定义对话框更改这些属性)
  • OS提供了诸如快速搜索栏(QSB)
  • 之类的视图

如果您喜欢默认SDK资源的外观,那么您可以在sdk_folder/platforms/android-9/data/res/中找到这些资源(将9替换为您想要资源的SDK版本) - 将您想要的版本复制到您的应用中并引用那些。

您可以查看SDK使用的主题: