Android主题无法实现最简单的:自定义每个主题颜色

我是Android开发的初学者,虽然编码很有意义,但android主题恕我直言

我无法实现这个简单的任务:

我有(例如)一种名为“blah”的颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="blah">#F0F0F0</color>
<resources>

它在XML布局或代码中随处可见,并且由不同的视图组件用作“@ color / blah”

我只想让每个主题的颜色值更改

所以,当我使用MyTheme1时,blah应为#F0F0F0,当我使用MyTheme2时,应该是#00FF00

我一直在阅读有关主题的内容,但仍然无法找到如何实现这个简单的任务,因为我的应用程序不需要特殊的样式等等,只是每个主题的颜色.

提前完成

更新:

在Mohamed_AbdAllah提供的链接之后,我成功地创建了一些
通过在attrs.xml和styles.xml中定义它们来定制颜色:

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="color_item_title" format="color|reference" />
</resources>

styles.xml

<style name="AppBaseThemeDark" parent="android:Theme.Black">
<item name="color_item_title">@color/White</item>                      
</style>

但现在出现了一个更严重的问题

我可以在每个视图中成功使用颜色?color_item_title,
所以按钮和文字实际上得到了那种颜色.

但在自定义drawables或listview布局上使用?color_item_title
(这是在运行时受到充气的视图)导致崩溃.

所以在listview listitem布局中使用?color_item_title会崩溃
运行时在该行有一个inflater消息:(

它也在我的drawables崩溃:(再次出现通货膨胀错误)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<solid android:color="@color/Black" />
<corners
    android:bottomLeftRadius="8dp"
    android:bottomRightRadius="8dp"
    android:topLeftRadius="8dp"
    android:topRightRadius="8dp" />
 <stroke android:width="1dp" android:color="?color_item_title" />
</shape>
最佳答案
经过搜索和尝试,我得到的提示是,你可以做一些事情和一些你不能做的事情.

您可以

a)在attrs中定义自己的属性

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="color_gallery_backround" format="color|reference" />
</resources>

b)在styles.xml中设置它们的值

<style name="AppBaseThemeDark" parent="android:Theme.Black">
           <item name="color_gallery_backround">@color/White</item>              
 </style>
 <style name="AppBaseThemeWhite" parent="android:Theme.Light">
           <item name="color_gallery_backround">@color/Black</item>              
 </style>

c)在任何视图中使用它们?color_gallery_backround或?attr / color_gallery_backround
例如

android:background="?attr/color_gallery_backround"

你不能

a)您无法从自定义drawable中访问此属性,因为它们在期间无效
通货膨胀

所以你不能在这里使用?attr / color_gallery_backround:

customshape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<solid android:color="**?attr/color_gallery_backround**" />
 <stroke android:width="2dp" android:color="@color/Black" />
</shape>

b)您无法在视图中访问此属性(例如)
ListView作为ListItem视图

因此,对于至少属于API 10的属性的主题“支持”具有深度限制.

解决方案

如建议的那样,您必须使用不同的颜色创建两个单独的drawable,并根据主题设置属性以引用这些drawable:

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="rounded_background" format="reference" />   
</resources>

并在每个主题上,设置要在styles.xml中使用的实际drawable:

<resources>

    <style name="AppBaseThemeDark" parent="android:Theme.Black">
           <item name="rounded_background">@drawable/round_rect_shape_dark</item>    
           </style>

    <style name="AppBaseThemeLight" parent="android:Theme.Light">
           <item name="rounded_background">@drawable/round_rect_shape_white</item>     
           </style>

</resources>

现在你可以将你的drawable引用为?rounded_background并让主题选择它.

对于ListView listitem布局中的膨胀视图,您必须以编程方式设置颜色.

转载注明原文:Android主题无法实现最简单的:自定义每个主题颜色 - 代码日志