2015-02-11 149 views
0

我的應用程序看起來很漂亮,使用新的棒棒糖工具。我決定向後兼容性很重要,所以我將所有片段,actionBar導入切換到支持庫。現在(可以理解)我不能使用我的棒棒糖主題。使用我的棒棒糖主題(在棒棒糖上)!

是否有使用不同的動作條爲不同主題的方法嗎?我試圖將支持的ActionBar強制轉換爲新的,但似乎並不允許。

我的問題在於以下(從V21文檔)

所有活動的

必須從ActionBarActivity,這 從FragmentActivity延長從V4支持庫擴展,這樣你就可以 繼續使用片段。所有主題(需要動作 條/工具欄)必須從Theme.AppCompat繼承。有可用的變體 ,包括Light和NoActionBar。當將任何東西膨脹到 顯示在操作欄上(例如SpinnerAdapter在工具欄中導航列表 )時,請確保使用通過getSupportActionBar()。getThemedContext()檢索的操作欄主題 上下文。您必須使用MenuItemCompat中的靜態方法來調用MenuItem上的任何與動作相關的 調用。

所以通過調用getsupportActionBar我不能用我的霍洛主題:

<resources> 
<!-- Base application theme. --> 
<style name="appTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 

</style> 


<style name="MyActionBar" 
    parent="android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:background">@color/blue_semi_transparent</item> 
</style> 
</resources> 

而且由於某些原因,操作欄失去,這是它的按鈕,它進入下拉菜單,應用程序圖標不再出現在操作欄中。 我真的不是這方面的專家,只開始在棒棒糖上開發,所以會非常感謝建議。

+0

如果您使用的是Holo主題,則根據定義,您沒有構建棒棒糖應用程序--Lollipop和API 21使用'Theme.Material'作爲其基礎。 – ianhanniballake 2015-02-11 22:14:33

+0

好的公平點 - 但我的問題仍然出現與材料佈局。 – 2015-02-11 22:15:28

回答

2

程序兼容性(即,ActionBarActivity)使用它定義默認整個應用程式着色Material color palette。在你的情況,你需要使用colorPrimary爲您的操作欄的顏色:

<style name="appTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/blue_semi_transparent</item> 
</style> 

請注意,你也應該爲着色狀態欄提供colorPrimaryDark(同色的深色版本)。

每部分過時Action Bar training,程序兼容性也使用應用程序命名空間中的屬性(象外之象showAsAction沒有API 11之前存在)爲您的菜單項:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" > 
    <item android:id="@+id/action_search" 
     android:icon="@drawable/ic_action_search" 
     android:title="@string/action_search" 
     app:showAsAction="ifRoom" /> 
    ... 
</menu> 

Toolbar documentation(這是缺省行爲材質主題和AppCompat):

在現代的Android用戶界面中,開發人員應該更多地依賴工具欄視覺上不同的顏色方案,而不是他們的應用程序圖標。 使用應用程序圖標和標題作爲標準佈局不鼓勵在API 21設備和更新的設備上使用。

因此,正如您所指出的,應用程序圖標不會出現在操作欄上是預期的行爲。

+0

這是一個非常好的答案。感謝您花時間發佈它。 – 2015-02-11 22:29:23