2010-10-23 19 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