android - 提供多个 Android 应用程序主题的最佳实践

标签 android themes

我正在尝试研究如何组织具有多个主题的 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

显示一个应用

  1. 定义一个样式,比如说“light.enabled”

    #000000

  2. 定义一个属性引用,比如“enabled”

  3. 定义一个样式(主题)项,例如,

    @style/light.enabled

  4. 使用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/

相关文章:

android - 嵌套 Parcelling : RuntimeException - Unmarshalling unknown type code 3211319 at offset 440

android - TextView 在水平 LinearLayout 中拉伸(stretch)并将另一个 View 推离屏幕

android - Whatsapp、Viber 之类的应用程序如何跟踪移动用户?

html - 如何将一个背景图像设置为每个帖子都设置在 tumblr 主题上的框?

python - 安装 jupyter 主题后,笔记本和 docker 容器不再工作

android - 如何使用 ListView 填充表格布局

android - kivy中只有数字输入小部件

c++ - Windows 7基本主题上的MFC控件隐藏

android - 主题切换时的过渡(或Activity.recreate())

wordpress - 在 WordPress 3.5.x 上的自定义主题小部件中调用 wp_enqueue_media() 会导致 js 错误