我正在尝试研究如何组织具有多个主题的 Android 应用程序。这是我的问题的一个简化示例,
2 个主题,“浅色”和“深色”,
在每个主题中,两种文本颜色:“启用”和“禁用”
现在的问题是,当我定义我的 TextView 时,我不想在那里调出“亮”或“暗”,我只想在应用程序级别指定主题并应用它。基本上,我想要 CSS 选择器。我希望能够像这样定义我的主题,
<style name="Light.enabled" .../>
<style name="Light.disabled" .../>
和我的 TextView 一样,
<TextView style="@style/.enabled" .../>
<TextView style="@style/.disabled" .../>
并根据我在应用程序级别调用的是“亮”还是“暗”来应用“启用”或“禁用”。
这个页面, http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html
显示一个应用
定义一个样式,比如说“light.enabled”
#000000
定义一个属性引用,比如“enabled”
定义一个样式(主题)项,例如,
@style/light.enabled
使用attr定义 View 中的样式,
这是我想要的,但它对我不起作用。唯一的区别是我使用的是 appwidget。作者为 Activity 设定了主题。我唯一可以设置它的地方是 Context.setTheme(),以及 list 中的“应用程序”标签。两者似乎都没有什么不同。
最佳答案
您不能将主题应用到应用程序小部件。您只需要拥有使用不同样式的不同 XML。
此外,当您将亮与暗以及启用与禁用作为类似事物进行讨论时,会让人感到困惑。它们在平台上有很大不同。
Light 和 dark 是平台定义的实际“主题”,它是资源属性的一组默认值,源于 android:style/Theme。这些已通过 list 中的 android:theme 或 API 中的 setTheme() 进行了更改。
启用和禁用是状态。它们与 StateListDrawable(通过 drawable/中的标签)或 ColorStateList(通过 color/中的标签)一起使用,以根据启用状态选择可绘制对象/颜色。
例如,这里有一种颜色会根据状态而变化:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/color/primary_text_dark.xml
这是一个根据状态变化的可绘制对象:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/drawable/btn_default.xml
关于android - 提供多个 Android 应用程序主题的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002754/