アクションバーの下の影を削除


208

私はactionbarsherlockを使用しています。以下のコードは、その背景をカスタムのものに変更する責任があります。

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="background">@drawable/actionbar_bg</item>
    <item name="android:background">@drawable/actionbar_bg</item>
    <...>  
</style>

<style name="Theme.MyApp" parent="@style/Theme.Sherlock.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <..>
</style>

そして、それはactionbarsherlock(ハニカムの下のバージョン)で機能します。しかし、ICSでは、アクションバーの下に不要な影があります。消えさせるスタイルアイテムとは?

回答:


481

消えさせるスタイルアイテムとは?

シャドウを削除するには、これをアプリのテーマに追加します。

<style name="MyAppTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowContentOverlay">@null</item>
</style>

更新: @ Quinny898が述べたように、Android 5.0ではこれが変更さsetElevation(0)れたため、アクションバーを呼び出す必要があります。サポートライブラリを使用している場合は、次のように呼び出す必要があることに注意してください。

getSupportActionBar().setElevation(0);

アクションバーではなくステータスバーの下から影を取り除くスタイルではないでしょうか?
のMichałK

96
ありがとう、消えた。注意すべき重要な点は、このコード行は、アクションバースタイルではなく、アプリのテーマに表示する必要があるということです。
のMichałK

3
働く!明確にする必要があるのは、このコード行をActionBarテーマタグではなく、アプリテーマタグに追加する必要があることです。
tuoxie007 14年

また、注目すべきもう1つのことは、テーマを値、値-v11、値-v14(ツールバーを使用する場合は、これを無視する)で変更する必要があるということです
TheOne_su

6
ロリポップ前のデバイスでgetSupportActionBar().setElevation(0);は機能しません。<item name="android:windowContentOverlay">@null</item>アプリケーションのテーマを入れました。同様の問題がありました。今、私はそれらの両方を持っています。アプリケーションテーマにsetElevationを追加し、windowContentOverlayアイテムを追加しました。setElevationはandroid 5.0以降で機能し、その他はpre-lollipopで機能します。乾杯!
Reaz Murshed、2015

140

Android 5.0で、スタイルに直接設定する場合は、次のようにします。

<item name="android:elevation">0dp</item>

サポートライブラリの互換性を使用する場合:

<item name="elevation">0dp</item>

AppCompatライトテーマのスタイルの例:

<style name="Theme.MyApp.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <!-- remove shadow below action bar -->
    <!-- <item name="android:elevation">0dp</item> -->
    <!-- Support library compatibility -->
    <item name="elevation">0dp</item>
</style>

次に、このカスタムActionBarスタイルをアプリのテーマに適用します。

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Theme.MyApp.ActionBar</item>
</style>

5.0より前のAndroidの場合、これもアプリのテーマに追加します。

<!-- Remove shadow below action bar Android < 5.0 -->
<item name="android:windowContentOverlay">@null</item>

1
5.0以前のデバイスでは機能しませんでした。問題は、windowContentOverlayアプリのテーマではなく、アクションバーのテーマにを追加したことです。
Oliv 2015

申し訳ありませんが、反対のことをしようとしています。標高の影を実際にロリポップ前のデバイスに表示します(ロリポップデバイスの場合はなんとかして実現しandroid:elevationました)。私はこのアプローチを使用してそれを行うことができません。かなりまっすぐだと思います。標高属性にゼロ以外の値を入力すると、それだけになります。
acrespo

android:windowContentOverlay属性に触れない場合、デフォルトで表示されるはずです。おそらく、正しいテーマを使用していることを確認してください... AppCompatテーマを使用する必要があると思います。
Sloosh、2015年

しかし、android:windowContentOverlayロリポップ前のAPI に対処するにはどうすればよいですか?minSDKがpre lollipopであるにもかかわらず、ターゲットが21の場合、コンパイルできません。
Opiatefuchs

2
これは機能しましたが、属性<style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">なしstyle/で使用した場合のみparentです。
イゴール

103

Android 5.0ではこれが変更され、アクションバーでsetElevation(0)を呼び出す必要があります。サポートライブラリを使用している場合は、次のように呼び出す必要があることに注意してください。

getSupportActionBar().setElevation(0);

windowContentOverlayスタイル項目の影響を受けないため、スタイルを変更する必要はありません。


1
すべてのアクティビティでこれを行う必要がありますか、それともすべてのアクティビティに適用する簡単な方法はありますか?今のところ、これをすべて追加します。ありがとう!
cnfw 2014年

他のアクションバーの方法(タイトルなど)と同じように、すべてのアクティビティを言います
Kieron

残念です。このようなパラメーターをstyles.xmlファイルで設定すると便利です。たぶんそれは、将来のアップデートで来る
cnfw

これは5.0より前のバージョンでは機能しません。サポートアクションバーは以前のすべてのデバイスと互換性があるはずではありませんか?
splinter123 2015年

ここで@ splinter123と同じ:( AppCompatを使用する場合、プレロリポップの影をどのように削除できるのか
疑問に思い

55

app:elevation="0dp"AppBarLayoutを追加して、appbarの影を非表示にします


1
みんなを見て、このソリューションを適用して、他のみんなが言ったことを忘れてください。ありがとう!できます!非常にシンプルなソリューション!
Sブルース2016年

1
次のように使用します:<android.support.design.widget.AppBarLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" app:elevation = "0dp" android:theme = "@ style / AppTheme.AppBarOverlay">
バーラトクルラタン2016

@MarcoFerrari AppBarLayoutが 'getSupportActionBar()。setElevation(0);'の場合に使用します。動作しません。
サリルダワン

39

ActionBarSherlockを使用している場合

あなたのテーマにこれを追加してください:

<style name="MyTheme" parent="Theme.Sherlock">
    ....
    <item name="windowContentOverlay">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    ....
</style>

これはより良い答えであり、互換性項目を指定しています
1owk3y 2014年

25

で設定する必要app:elevation="0dp"android.support.design.widget.AppBarLayoutあり、それが機能します。

<android.support.design.widget.AppBarLayout
    app:elevation="0dp"... >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/transparent"
        app:popupTheme="@style/AppTheme.PopupOverlay" >


    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

1
これは、AppBarの影がどこにでもあることを引き起こします-プログラムでそれをどのように制御できますか?
スイス

14
app:elevation="0dp" 

だがしかし

android:elevation="0dp"

Android Lで私のために働いた


2

私も同じ問題を抱えており、この問題を無事解決しました。必要なのは、標高を削除するアクティビティで標高を0浮動小数点値に変更することだけです。

というアクティビティで変更したい場合はMyActivity.javaActionBar最初に取得する必要があります。

最初にActionBarクラスをインポートします

import android.support.v7.app.ActionBar;

インポート後、アクションバーの変数を初期化し、その高度を0に設定する必要があります。

 private ActionBar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    .
    .
    toolbar=getSupportActionBar();
    toolbar.setElevation(0);
    .
    .
    }

1

Xamarin開発者のために、使用してください:SupportActionBar.Elevation = 0;AppCompatActivityまたはActionBar.Elevation = 0;非compatの活動のために


1

Kotlinのソリューション(Android 3.3、Kotlin 1.3.20)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar!!.elevation = 0f
}

なぜこれが反対票を投じられたのか(私はKotlinで新しい)
はわかり

1

これを試してみてください。テーマを変更せずに役に立ちました。AppBarLayoutを任意のレイアウト内に配置します。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="false"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:layout_height="?attr/actionBarSize"
       android:background="@color/white">
        <ImageView
            android:src="@drawable/go_grocery_logo"
            android:layout_width="108dp"
            android:layout_height="32dp" />
    </android.support.v7.widget.Toolbar>


</android.support.design.widget.AppBarLayout>
</RelativeLayout>

0

フラグメントに取り組んでいて、設定toolbar.getBackground().setAlpha(0);または任意の消失後に消えた場合は、AppBarLayoutをxmlの最後に持ってくる必要があると思うので、そのFragment、次にAppBarLayout、relativelayout / constraint / linearのいずれかを使用します。


0

これtoolbar.getBackground().setAlpha(0);をOnCreateメソッド内に追加します。これandroid:elevation="0dp" android:background="@android:color/transparent をツールバーのxmlファイルに追加し ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.