14

スタイルを設定した xml レイアウトを含めています。

<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>

インターネット上の検索の一部は、@null に設定された windowContentOverlay を使用することを示唆しています。しかし、スタイルxmlで使用しても何も変わりません。誰でも何をすべきかを助けることができますか?

4

3 に答える 3

30

アクションバーの下に影を作成する場合はandroid:windowContentOverlay、アプリケーションテーマにパラメーターを設定する必要があります(コードでは、アクションバースタイルに誤って設定しています)。

あなたの例では、次のようになります。

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

値を使用@nullすると、影が削除されます。

この1行は、Android3.0以降のActionBarに影を付けます。ただし、ActionBarSherlockを使用している場合は、期待どおりに機能しません。Android 4.0より古いシステムを実行しているAndroidデバイスのActionBarSherlockの上にウィンドウの上部に影が作成されます(Android 3.0以降のAPIにはActionBarが存在しますが、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の下に影は作成されません。では、これら2つのパラメーターを組み合わせて、ActionBarとActionBarSherlockの両方で目的のシャドウを取得するにはどうすればよいでしょうか。

リソース構成修飾子を使用します。この場合は、プラットフォームバージョン修飾子を使用します。2res/values/styles.xml番目のxmlコードを使用しています。そしてres/values-v14/styles.xml、最初のxmlコードを使用します。したがって、ActionBarSherlockバージョンがデフォルトで使用され(Android 4.0より前のバージョンの場合)、ActionBarバージョンがAndroid4.0以降で使用されます。

編集: Android 4.3(APIレベル18)にバグ があり、android:windowContentOverlay機能しません。将来のリリースで修正されるはずです。Android 4.3で修正する必要がある場合は、バグレポートにリンクされている回避策を見つけることができます。

于 2012-08-16T02:01:34.143 に答える
5

以前の回答で、アクション バー スタイルではなく、アプリケーション テーマで「windowContentOverlay」を使用すると言っていました。

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

リアルな影が必要な場合は、「Your Android Folder」/platforms/android-16/data/res/drawable-hdpi/ で見つけることができます

ab_solid_shadow_holo.9.png を drawable-hdpi フォルダーにコピーすると、最終結果は次のようになります。

<style name="Theme.Styled" parent="Theme.Sherlock">
        ...
        <item name="windowContentOverlay">@drawable/ab_solid_shadow_holo</item>
</style>
于 2012-08-22T12:22:05.753 に答える
3

さらに、API21(Lollipop) の上では、これもコードで必要になります。

getSupportActionBar().setElevation(0);
于 2014-11-28T10:03:07.613 に答える