2010-10-23 62 views
4

我试图找出如何组织一个Android应用程序,将有多个主题。这里是我的问题的一个简单的例子,最佳实践提供多个Android应用主题

2周的主题,“光”和“黑暗”,
每个主题内,两个文本颜色:“已启用”和“禁用”

现在的问题是,当我定义了我的TextView,我不想在那里调用“light”或“dark”,我只想在应用程序级别指定主题并将其应用。基本上,我想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

表明

  1. 定义风格的应用程序,说 “light.enabled”

    #000000

  2. 定义属性参考,说“启用”

  3. 限定式(主题)等项目,

    @风格/ light.enabled

  4. 使用ATTR在视图中定义样式,

这是IW蚂蚁,但它不适合我。唯一的区别是我使用appwidget。作者设定了活动的主题。我可以设置的唯一位置是Context.setTheme(),并且位于清单中的“application”标记处。这两者似乎都没有区别。

+0

我发现了几个页面,例如这个,http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html,这意味着你可以从一个项目中引用其他样式,但是编辑器抱怨,因为它希望项目名称是一个明确定义的android属性(例如,android:textColor)。 – 2010-10-23 06:23:59

回答

0

不能应用主题的应用小部件。您只需要使用不同样式的不同XML。

而且,当你谈论光与暗并启用了与类似的事情禁用它是混乱的。它们在平台上非常不同。

  • 光明与黑暗的是实际的“主题”为平台定义它,这是资源属性,扎根停用Android的一组默认值:风格/主题。这些会在清单中的android:主题或API中的setTheme()中更改。

  • 启用和禁用状态。它们与StateListDrawable(通过drawable /中的标签)或ColorStateList(通过color /中的tag)一起使用,以基于启用状态选择drawable/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

+0

谢谢。好的,使用“标签”(文字颜色)和“价值”(文字颜色),如果有帮助。我的观点是试图给出一个抽象的例子,但实际上并不代表启用和禁用。 – 2010-10-24 20:34:14

0

如果你想支持多主题在应用程序。

  1. 定义主题,价值观/ styles.xml

    <style name="AppTheme" parent="Theme.AppCompat.Light"> 
    

    @绘制/ ic_mode_comment_white_24dp

    ... @绘制/ ic_subject_black_24dp

  2. 定义山坳在colors.xml ORS

<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); } }

  • 按照此文章part1part2

    +0

    这是一项活动。我问的是应用程序小部件。 – 2015-05-29 00:19:40