最近,我有一個要求更改ImageView
圖片將根據主題進行更改。我正在使用ExpandableListView
並使用ImageView
作爲 組指示符,而不是出盒組指示符。由於我的應用程序支持明暗主題,因此我希望將組指示符,動作條圖標切換爲明亮和黑暗的版本。
這是多麼:
聲明自定義在res/values/attrs.xml
文件屬性爲每個ImageView的或動作條圖標的基於主題的改變:
<declare-styleable name="customAttrs">
<attr name="actionSearchIcon" format="reference" />
<attr name="actionAcceptIcon" format="reference" />
<attr name="actionRefreshIcon" format="reference" />
<attr name="groupIndicatorIcon" format="reference" />
</declare-styleable>
在主題文件這將是res/values/styles.xml
或根據您要定位的版本,合適的一個定義指向適當的可繪製對象的相同屬性。例如下面,Black
主題指向與黑暗主題相關的drawables,Light
主題指向與light主題相關的drawables。
<style name="Black" parent="@style/Theme.AppCompat">
<item name="actionSearchIcon">@drawable/ic_action_search</item>
<item name="actionAcceptIcon">@drawable/ic_action_accept</item>
<item name="actionRefreshIcon">@drawable/navigation_refresh</item>
<item name="groupIndicatorIcon">@drawable/group_indicator</item>
</style>
<style name="Light" parent="@style/Theme.AppCompat.Light">
<item name="actionSearchIcon">@drawable/ic_action_search_light</item>
<item name="actionAcceptIcon">@drawable/ic_action_accept_light</item>
<item name="actionRefreshIcon">@drawable/navigation_refresh_light</item>
<item name="groupIndicatorIcon">@drawable/group_indicator_light</item>
</style>
最後,未來的實際佈局,點屬性的初步認識你的屬性定義,而不是直接到可繪製。例如 中的動作條圖標情況下:
<item
android:id="@+id/action_refresh"
android:icon="?attr/actionRefreshIcon"
android:orderInCategory="107"
android:title="@string/action_refresh"
app:showAsAction="always"/>
<item
android:id="@+id/action_accept"
android:icon="?attr/actionAcceptIcon"
android:orderInCategory="108"
android:title="@string/action_accept"
app:showAsAction="always"/>
<item
android:id="@+id/action_search"
android:icon="?attr/actionSearchIcon"
android:orderInCategory="50"
android:title="@string/action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="collapseActionView|always"/>
或者在ImageView的的情況下:
<ImageView
android:id="@+id/group_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:contentDescription="@string/app_name"
android:src="?attr/groupIndicatorIcon"/>
令人興奮的部分是,此概念可以應用於任何控制或任何屬性:)
你有沒有找到任何解決方案呢?我也有類似的要求。 – 2012-02-15 07:06:37