İşlem çubuğunun altındaki gölgeyi kaldır


208

Actionbarsherlock kullanıyorum. Aşağıdaki kod, arka planını özel bir kodla değiştirmekten sorumludur.

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

Ve actionbarsherlock için çalışır (petek altındaki sürümlerde). Ancak ICS'de eylem çubuğunun altında istemediğim bir gölgem var. Kaybolması için stil öğesi nedir?

Yanıtlar:


481

Kaybolması için stil öğesi nedir?

Gölgeyi kaldırmak için bunu uygulama temanıza ekleyin:

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

GÜNCELLEME: @ Quinny898'in belirttiği gibi, Android 5.0'da bu değişti, setElevation(0)eylem çubuğunuzu aramanız gerekiyor. Destek kitaplığını kullanıyorsanız, kütüphaneyi şöyle çağırmanız gerektiğini unutmayın:

getSupportActionBar().setElevation(0);

Eylem çubuğunun değil, durum çubuğunun altından gölgeyi kaldırmak bir stil değil mi?
Michał K

96
Teşekkürler, kayboldu. Dikkat edilmesi gereken önemli nokta, bu kod satırının eylem çubuğu stilinde değil uygulama temasında görünmesidir.
Michał K

3
Çalışıyorum! Açık olması gereken, bu kod satırının ActionBar Tema etiketine değil Uygulama Teması Etiketine eklenmesi gerektiğidir.
tuoxie007

Ayrıca dikkat edilmesi gereken başka bir şey de temanızı değerler, değerler-v11, değer-
v14 olarak

6
lolipop öncesi cihazlar getSupportActionBar().setElevation(0);çalışmaz. Yani <item name="android:windowContentOverlay">@null</item>uygulama temanızı koydunuz . Benzer bir sorun yaşadım. Şimdi ikisine de sahibim. Uygulama temasında setElevation öğesinden ve windowContentOverlay öğesinden yükselme eklendi. setElevation android 5.0 ve üstü için, diğeri lolipop öncesi için çalışır. Şerefe!
Reaz Murshed

140

Android 5.0 için, doğrudan bir stil kullanımına ayarlamak istiyorsanız:

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

ve Destek kitaplığı uyumluluğu kullanımı için:

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

AppCompat hafif teması için stil örneği:

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

Ardından bu özel ActionBar stilini uygulama temanıza uygulayın:

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

5.0 öncesi Android için bunu uygulama temanıza ekleyin:

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

1
5.0 öncesi cihazlar için benim için çalışmadı. Sorun, windowContentOverlayuygulama temasına değil, eylem çubuğu temasına ekledim .
Oliv

Üzgünüm ama ben tersi bir şey yapmaya çalışıyorum, yükseklik gölgesi aslında lolipop öncesi cihazlarda görünmesini sağlayın ( android:elevationLollipop cihazları için yapmayı başardım ). Bu yaklaşımı kullanarak bunu başaramıyorum. Bunun oldukça düz olacağına inanıyorum. Yükseklik nitelikleri için sıfırdan farklı bir değer koyun ve bu olurdu.
acrespo

Android'e dokunmazsanız varsayılan olarak görünür olmalıdır: windowContentOverlay özniteliği, belki doğru bir tema kullandığınızı kontrol edin ... Sanırım bir AppCompat teması kullanmanız gerekiyor.
Sloosh

ama android:windowContentOverlaylolipop öncesi API ile nasıl başa çıkılır? Benim minSDK öncesi lolipop ama hedef 21 ise derleyemiyorum?
Opiatefuchs

2
Bu çalıştı ama kullandığım sadece <style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">olmadan style/içinde parentözniteliği.
Igor

103

Android 5.0'da bu değişti, eylem çubuğunuzda setElevation (0) öğesini çağırmalısınız. Destek kitaplığını kullanıyorsanız, kütüphaneyi şöyle çağırmanız gerektiğini unutmayın:

getSupportActionBar().setElevation(0);

WindowContentOverlay stil öğesinden etkilenmez, bu nedenle stiller üzerinde değişiklik yapılması gerekmez


1
Bunu her etkinlik için mi yapmak zorundasınız yoksa tüm faaliyetlere uygulanması için hızlı bir yöntem var mı? Şimdilik tüm aktivitelerimi ekleyeceğim. Teşekkürler!
cnfw

Diğer herhangi bir actionbar yöntemi (örneğin başlık) gibi, her etkinliği söyleyebilirim
Kieron

Bu utanç verici. Styles.xml dosyasında bunun gibi parametrelerin ayarlanması iyi olur. Belki bu gelecekteki bir güncellemede gelecek
cnfw

5.0'dan daha düşük sürümlerde çalışmaz. Destek işlem çubuğunun önceki tüm cihazlarla uyumlu olması gerekmez mi?
splinter123

@ splinter123 burada aynı :(
AppCompat

55

app:elevation="0dp"Appbar'da gölgeyi gizlemek için AppBarLayout'a ekle


1
Herkese bakın, bu çözümü uygulayın ve herkesin söylediklerini unutun. Teşekkürler dostum! işe yarıyor! Çok basit bir çözüm!
S bruce

1
Bunun gibi kullanın: <android.support.design.widget.AppBarLayout android: layout_width = "match_parent" android: layout_height = "wrap_content" app: elevation = "0dp" android: theme = "@ style / AppTheme.AppBarOverlay">
Bharat Kul Ratan

@MarcoFerrari AppBarLayout için bunu 'getSupportActionBar (). SetElevation (0);' olarak kullanın. çalışmıyor.
Salil Dhawan

39

ActionBarSherlock ile çalışıyorsanız

Temanıza şunu ekleyin:

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

bu daha iyi bir yanıttır, uyumluluk öğesini belirtir
1owk3y

25

Sen ayarlamalısınız app:elevation="0dp"içinde android.support.design.widget.AppBarLayoutve sonra çalışır.

<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
Bu, AppBar'ın gölgesinin her yerde uzakta olmasına neden olur - bunu programlı olarak nasıl kontrol edebilirim?
Suisse

14
app:elevation="0dp" 

Ama değil

android:elevation="0dp"

Android L'de benim için çalıştı


2

Aynı sorunu yaşıyorum ve bu sorunu başarıyla çözdüm. Yapmanız gereken tek şey, yüksekliği kaldırmak istediğiniz etkinlikte yüksekliği 0 kayan nokta değerine değiştirmek.

Eğer bunu bir aktivitede değiştirmek istiyorsanız ilkini MyActivity.javaalmalısınız ActionBar.

İlk önce ActionBarsınıfı içe aktarın

import android.support.v7.app.ActionBar;

içe aktardıktan sonra, bir değişken eylem çubuğunu başlatmanız ve yükselmesini 0'a ayarlamanız gerekir.

 private ActionBar toolbar;

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

1

Xamarin Geliştiricileri SupportActionBar.Elevation = 0;için lütfen: uyumsuz Faaliyetler için AppCompatActivityveya ActionBar.Elevation = 0;uygun olmayanlar için


1

Kotlin için Çözüm (Android 3.3, Kotlin 1.3.20)

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

Bunun neden reddedildiğinden emin değilim (Kotlin'de yeniyim) ama bu başkaları için işe yaramadı
Allen Wixted

1

Bu temayı değiştirmeden bana yardımcı oldu. AppBarLayout'unuzu herhangi bir düzen içine yerleştirin.

<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

Bu parçalar üzerinde çalışan ve ayar toolbar.getBackground().setAlpha(0);veya herhangi bir kaybolma sonra kayboldu için, ben xml son AppBarLayout getirmek zorunda, böylece onun Parça sonra AppBarLayout sonra göreceli / kısıt / doğrusal hangi u kullanmak.


0

Bunu toolbar.getBackground().setAlpha(0);iç OnCreate yöntemine ekleyin . Bunu ekle: android:elevation="0dp" android:background="@android:color/transparent araç çubuğu xml dosyanıza.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.