因此,我有一個Android library,我希望其他人能夠在使用它時輕鬆自定義其顏色。問題在於顏色不僅僅是一個屬性(如視圖背景),而更像是主題顏色(視圖背景,文本顏色,按鈕的筆觸等等),所以我是無法將其作爲視圖屬性傳遞。所以我結束了使用color reference
和風格,佈局和繪圖使用它:將默認顏色設置爲Android庫
colors.xml:
<resources>
<attr name="color" format="reference" />
</resources>
layout.xml:
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/color">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/color"/>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:theme="@style/LibraryTheme.TextAppearance"/>
</LinearLayout>
styles.xml在庫項目:
<style name="LibraryTheme.TextAppearance">
<item name="android:textColor">?attr/color</item>
<item name="colorControlNormal">?attr/color</item>
<item name="android:textColorHint">?attr/color</item>
<item name="colorControlActivated">?attr/color</item>
<item name="colorControlHighlight">?attr/color</item>
</style>
這很好,當有人使用我的庫他必須宣佈,他希望你在他的主題使用的顏色:
styles.xml在應用項目:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="color">@color/my_color</item>
</style>
問題是這樣的:我想用默認顏色方案提供這個庫。它現在可以執行2個選項:
- 聲明我自己的主題與默認顏色集,用戶將需要繼承他的主題從我的。
- 將一些default_color放在我的color.xml文件中,這樣用戶就可以使用它作爲他主題中的顏色。
第一個是非常糟糕的,因爲我不能強制用戶使用特定的應用程序主題(如AppCompact.Light)。 第二個也不是那麼好,因爲我希望用戶能夠無縫地使用默認設置,並且我需要設置主題中的幾種顏色。
有什麼其他的方式,你認爲我可以讓其他用戶輕鬆玩顏色?
謝謝。
您可以檢查[SublimePicker(https://開頭的github .com/vikramkakkar/SublimePicker)項目的[主題](https://github.com/vikramkakkar/SublimePicker/blob/master/sublimepickerlibrary/src/main/res/values/themes.xml)設置。這是非常複雜的,因爲我不得不提供很多主題選項。從你的分類來看,這個設置將會在** 1 **之下,我想。 '第一個非常糟糕,因爲我不能強制用戶使用特定的應用程序主題(比如AppCopact.Light)'---不,你會要求用戶覆蓋_your_主題,比如'parent =「MyLibrarysDefaultTheme 「'。這沒關係。 – Vikram
@Vikram看起來像你使用所有樣式屬性作爲單個屬性,並將它們設置在代碼中(如'iconColor'),如果我在多個地方都有顏色,而其中一些不能在代碼中設置,該怎麼辦? – shem
您需要的是控制設置了哪些屬性,以及當它們不存在/無效時應該怎麼做。只有在您創建自定義組件時才能提供此控件。在你的特定情況下,你會檢查attr/color是否已經設置,如果沒有,使用默認值 - 在_runtime_。另一件你應該記住的事情是,你的產品的用戶(或者說客戶)將是開發者 - 而不是最終用戶。如果它不會從圖書館的核心功能中剔除任何東西,那麼強制要求是可以的。 – Vikram