我正在尝试研究如何组织一个具有多个主题的Android应用程序。这是我的问题的简化示例,
2个主题,“光明”和“黑暗”,
在每个主题中,有两种文字颜色:“启用”和“禁用”
现在的问题是,当我定义我的TextView时,我不想在那里调出“光”或“暗”,我想在应用程序级别指定主题并应用它。基本上,我想要CSS选择器。我希望能够定义我的主题,
<style name="Light.enabled" .../>
<style name="Light.disabled" .../>
和我的文字视图一样,
<TextView style="@style/.enabled" .../>
<TextView style="@style/.disabled" .../>
并根据我是否在应用程序级别调出“亮”或“暗”来应用“启用”或“禁用”。
这个页面, http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html
显示
的应用定义一种风格,比如说“light.enabled”
#000000
定义属性引用,例如“enabled”
定义样式(主题)项目,如
@风格/ light.enabled
使用attr在视图中定义样式
这就是我想要的,但它对我不起作用。唯一的区别是我正在使用appwidget。作者设定了活动的主题。我可以设置它的唯一地方是Context.setTheme(),以及清单中的“application”标签。这两者似乎都没有区别。
答案 0 :(得分:3)
我找到了这个页面, http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html
给出了动态应用多个主题的绝佳示例。我似乎无法使用app小部件,但这是一个不同的问题。
答案 1 :(得分:0)
您无法将主题应用于应用小部件。您只需要使用不同的XML来使用不同的样式。
此外,当你谈论光与暗,启用与禁用相似时,它会让人感到困惑。它们在平台上非常不同。
光明与黑暗是平台定义的实际“主题”,它是资源属性的一组默认值,源于android:style / Theme。这些在清单中的android:theme或API中的setTheme()中更改。
启用和禁用状态。它们与StateListDrawable(通过drawable /中的标签)或ColorStateList(通过颜色/中的标签)一起使用,以根据启用状态选择可绘制/颜色。
例如,这里的颜色会根据状态而变化:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/color/primary_text_dark.xml
这是一个基于状态改变的drawable:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/drawable/btn_default.xml
答案 2 :(得分:0)
如果您正在尝试在应用程序中支持多个主题。
在values / styles.xml中定义主题
<style name="AppTheme" parent="Theme.AppCompat.Light">
@绘制/ ic_mode_comment_white_24dp
... @绘制/ ic_subject_black_24dp
在colors.xml中定义颜色
<resources>
<color name="colorPrimary">#FF9800</color>
</resources>
在活动运行时中切换主题
public abstract class BaseActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
if (PreferenceManager.getDefaultSharedPreferences(this)
.getBoolean("pref_dark_theme"), false)) {
setTheme(R.style.AppTheme_Dark);
}
super.onCreate(savedInstanceState);
}
}