2012-07-12 67 views
14

我包括我的風格的XML佈局:我如何在我的ActionBar(ActionBarSherlock)上有陰影?

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <style name="Theme.Styled" parent="Theme.Sherlock"> 
     <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item> 

    </style> 

    <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar"> 
     <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
     <item name="background">@color/red</item> 
     <item name="android:background">@color/red</item> 
     <item name="windowContentOverlay">@null</item> 
     <item name="android:windowContentOverlay">@null</item> 
    </style> 

    <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title"> 
     <item name="android:textColor">@color/white</item> 
     <item name="android:textSize">21sp</item> 
    </style> 

</resources> 

一些搜索互聯網上的提示,使用windowContentOverlay設置爲@null。但是,當我在風格xml中使用它時,它不會改變任何內容。任何人都可以幫助做什麼?

回答

30

如果您想在ActionBar下面創建陰影,您必須在應用程序主題上設置android:windowContentOverlay參數(在您的代碼中,您錯誤地將其設置爲ActionBar樣式)。

在您的例子那就是:

<style name="Theme.Styled" parent="Theme.Sherlock"> 
     ... 
     <item name="android:windowContentOverlay">@drawable/my_actionbar_shadow</item> 
</style> 

使用@null值刪除影子。

這一行在Android 3.0和更新的版本上設置ActionBar上的陰影。但是,如果您使用的是ActionBarSherlock,它不會像您期望的那樣工作。它會在運行早於Android 4.0的系統的Android設備上的ActionBarSherlock上創建窗口頂部的影子(儘管ActionBar在Android 3.0之後出現在api中,ActionBarSherlock使用比Android 4.0更早的所有Android版本的自定義實現)。

要在ActionBarSherlock下創建陰影,您必須在應用程序主題上設置windowContentOverlay參數(注意缺失的android:)。

<style name="Theme.Styled" parent="Theme.Sherlock"> 
     ... 
     <item name="windowContentOverlay">@drawable/my_actionbar_shadow</item> 
</style> 

再次,使用@null刪除陰影。

儘管此行適用於ActionBarSherlock,但它不適用於運行Android 4.0及更新版本的Android設備,在此類設備的ActionBar下不會創建陰影。那麼如何將這兩個參數結合起來以獲得ActionBar和ActionBarSherlock下的所需陰影?

使用resource configuration qualifiers,在你的情況下使用平臺版本限定符。 在res/values/styles.xml中使用第二個xml代碼。並在res/values-v14/styles.xml使用第一個XML代碼。因此默認使用ActionBarSherlock版本(適用於Android 4.0以前的版本),而ActionBar版本則適用於Android 4.0及更新版本。

編輯: 有一個在Android 4.3的(API級別18)一個bugandroid:windowContentOverlay不起作用。它應該在未來的版本中得到修復。如果您需要在Android 4.3中修復它,您可以在錯誤報告中找到鏈接的解決方法。

5

正如之前的回答所說的,在應用程序主題中使用「windowContentOverlay」而不是操作欄樣式。

<style name="Theme.Styled" parent="Theme.Sherlock"> 
     ... 
     <item name="windowContentOverlay">@drawable/my_actionbar_shadow</item> 
</style> 

如果你想要一個逼真的陰影,你可以找到一個在 「你的Android文件夾」/平臺/ Android的16 /數據/ RES /提拉 - 華電國際/

ab_solid_shadow_holo.9.png和把它複製到你的繪製,華電國際目錄下,那麼最終的結果是

<style name="Theme.Styled" parent="Theme.Sherlock"> 
     ... 
     <item name="windowContentOverlay">@drawable/ab_solid_shadow_holo</item> 
</style> 
+1

Android 9補丁映像不是太美觀,我結束了我的使用。謝謝 :) – Mehdiway 2013-11-07 11:35:54

3

此外,上述API21(棒棒堂),您將需要此代碼了。

getSupportActionBar().setElevation(0); 
相關問題