【问题标题】:android themes - defining colours in custom themesandroid 主题 - 在自定义主题中定义颜色
【发布时间】:2012-10-03 07:26:57
【问题描述】:

我确信有一个简单的答案,但我只是找不到它,所以我把它扔到 stackoverflow 中...... ;-)

我只是举个例子。我有一个 android 应用程序,用户可以在其中选择首选项中的主题 - 深色或浅色主题。根据选择的主题,我必须在我的应用程序中调整 20 种颜色。所以我希望我可以在主题中定义颜色,然后在我的 TextViews 等中使用这种定义颜色的名称。但到目前为止,我无法弄清楚如何做到这一点,并且在这里和那里找不到任何解决方案.我真的不想为这 20 种颜色中的每一种定义额外的深色和浅色样式,但到目前为止,这似乎是我能找到的唯一解决方案。

非常感谢任何提示

马丁:

更新:

在伪语法中就是我正在寻找的。有可能吗?

<style name="AppTheme.MyDark" parent="android:Theme">
  -?-> titleColor = "#ffffff"
  -?-> introColor = "#ffaaaa"  
</style>

<style name="AppTheme.MyLight" parent="android:Theme.Light">
  -?-> titleColor = "#000000"
  -?-> introColor = "#004444"  
</style>


<TextView
        android:id="@+id/quoteTitle"
        android:textColor=@titleColor
        ...
</TextView>

<TextView
        android:id="@+id/quoteIntro"
        android:textColor=@introColor
        ...
</TextView>

【问题讨论】:

  • 你可以在你的应用中使用样式和主题来做同样的事情。这是一个很好的教程。 mobileorchard.com/…
  • 谢谢,但在我的示例中,我必须定义 20 x 2 样式来覆盖 20 种颜色,这些颜色取决于主题。正确的?如前所述,我找到了这个解决方案,或者你能给我一个更优雅的例子吗?
  • 嗯,这就像 CSS 一样工作。您可以有一个父样式来抽象出所有子样式共享的属性。之后,对于每个子样式,您可以只更改颜色和特定于元素的属性(例如,可能是高度、宽度等)。然后你可以将它们包含在一个主题中,并为另一个主题做同样的事情。这非常优雅,因为它的设计目的是模仿 CSS 样式格式,以便网络开发人员和设计人员可以轻松切换到 android。
  • 非常感谢 - 我只是在我的问题中添加了一个伪代码来解释我在寻找什么。这将如何转换为 android 样式语法中的正确代码,同时保持伪代码的紧凑性?

标签: android android-theme


【解决方案1】:

我找到了一个似乎可行的解决方案。首先,您需要在 attr.xml 中定义自定义颜色字段

<?xml version="1.0" encoding="utf-8"?>
<resources>

<attr name="titleColor" format="reference|color" />
<attr name="introColor" format="reference|color" />

</resources>

接下来你定义你的主题

<style name="AppTheme.MyDark" parent="android:Theme">
   <item name="titleColor">#FFFFFF</item>
   <item name="introColor">#FFFFFF</item>
</style>


<style name="AppTheme.MyLight" parent="android:Theme">
   <item name="titleColor">#000000</item>
   <item name="introColor">#004444</item>
</style>

最后在你的布局中

<TextView
    android:id="@+id/quoteTitle"
    android:textColor="?titleColor"
    ...
</TextView>

<TextView
    android:id="@+id/quoteIntro"
    android:textColor="?introColor"
    ...
</TextView>

我主要找到了解决方案here

android 官方文档中似乎没有关于使用属性的解释。我找到的最佳资源是here

【讨论】:

  • 只是我在寻找,+1 为“?” (我不知道我们可以用“?”来缩写“?attr/”。
  • 谢谢!!我只是想使用主要/pr​​imaryDark/accent 颜色。因此,根据您的回答,我发现我只使用 ?colorPrimary/?colorPrimaryDark/?colorAccent
猜你喜欢
  • 2016-08-11
  • 1970-01-01
  • 2015-10-04
  • 2017-11-29
  • 2018-06-19
  • 1970-01-01
  • 2019-02-19
  • 2013-06-17
  • 1970-01-01
相关资源
最近更新 更多