2011-05-14 56 views
5

我正在嘗試爲我的問題找到解決方案,但我找不到任何地方,甚至使用Google搜索。基於應用程序主題名稱的應用程序主題,更改和ImageView src

我正在編寫一個使用主題的android應用程序,用戶可以將其切換爲dinamically,然後應用程序重新啓動以應用選擇的應用程序。這很好。

但是,我找不到方法來更改基於所選主題的imageview元素。我無法理解Android應用程序使用主題的方式,但我不能更改該文件,但僅更改應用程序對象中的主題名稱,並且在主題樣式標記中,我無法指定單個圖像視圖的src。

我只能使用windowbackground屬性來滿足我的應用需求。但是,我不能使它成比例地使用scaletype屬性,也使用位圖中的引力我不明白如何使它在窗口內減少保持圖像比例。

感謝大家回覆我的問題,並對我的英語感到抱歉! :)

+0

你有沒有找到任何解決方案呢?我也有類似的要求。 – 2012-02-15 07:06:37

回答

4

最近,我有一個要求更改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"/> 

令人興奮的部分是,此概念可以應用於任何控制或任何屬性:)

+0

在我們的項目上嘗試了這種方法,它工作。謝謝! – r1k0 2015-09-08 08:20:22