Видаліть тінь під панеллю дій


208

Я використовую actionbarsherlocklock. Частина коду, що наведена нижче, несе відповідальність за зміну фону на спеціальний.

<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

І ще одне, що також слід зазначити, що ви повинні змінити свою тему у значеннях, значеннях-v11, значенні-v14 (якщо ви використовуєте панель інструментів, ігноруйте це)
TheOne_su

6
для пристроїв до льодяника getSupportActionBar().setElevation(0);не працює. Отже, ви додали <item name="android:windowContentOverlay">@null</item>тему програми. У мене була подібна проблема. Тепер я їх обох. setElevation від та доданий windowContentOverlay елемент у темі програми. setElevation працює для Android 5.0 і новіших версій, тоді як інші працюють для попереднього льодяника. Ура!
Реаз Муршед

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>

Для Android 5.0 до 5.0 додайте це також до теми програми:

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

1
Не працювали для мене на пристроях до 5.0. Проблема полягала в тому, що я додав windowContentOverlayдо теми панелі дій, а не до теми програми.
Олів

Вибачте, але я намагаюся зробити протилежне, зробити так, щоб тінь на висоті фактично відображалася на пристроях, що попередньо льодяники (мені вдалося це зробити android:elevationдля пристроїв Lollipop). Я не можу це зробити, використовуючи такий підхід. Я вважаю, це було б досить прямо. Поставте ненульове значення для атрибутів elevation, і це було б все.
acrespo

Це повинно бути видно за замовчуванням, якщо ви не торкаєтесь атрибута android: windowContentOverlay, можливо, перевірте, чи використовуєте ви правильну тему ... Я думаю, вам потрібно використовувати тему AppCompat.
Слоош

але як боротися з android:windowContentOverlayпопередньо API-льодяник? Я не можу компілювати, якщо мій minSDK попередній льодяник, але ціль 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

Як і будь-який інший метод панелі дій (наприклад, заголовок), я б сказав, що кожна діяльність
Kieron

Це ганьба. Було б непогано встановити такі параметри у файлі styles.xml. Можливо, це надійде в майбутньому оновлення
cnfw

це не працює на нижчих версіях, ніж 5.0. Хіба панель дій підтримки не повинна бути сумісною з усіма попередніми пристроями?
splinter123

те саме, що і @ splinter123 тут :( Поцікавтеся, як я можу видалити тіні на попередньому Lollipop під час використання AppCompat.
FD_

55

додати app:elevation="0dp"в AppBarLayout для приховування тіні в панелі додатків


1
Подивіться всі, просто застосуйте це рішення і забудьте, що всі інші сказали. Спасибі людина! це працює! Дуже просте рішення!
S bruce

1
Використовуйте так: <android.support.design.widget.AppBarLayout android: layout_width = "match_parent" android: layout_height = "wrap_content" додаток: elevation = "0dp" android: topic = "@ style / AppTheme.AppBarOverlay">
Bharat Кул Ратан

@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

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 знаходиться всюди - як я можу це програмно контролювати?
Suisse

14
app:elevation="0dp" 

але ні

android:elevation="0dp"

працював для мене на android L


2

У мене є ця сама проблема, і я успішно вирішив цю проблему. Все, що вам потрібно зробити, це просто змінити висоту на 0 з плаваючою точкою в тій діяльності, в якій ви хочете зняти висоту.

Якщо ви хочете змінити його в MyActivity.javaтакій діяльності, яку називають, ви повинні її отриматиActionBar першу.

Спочатку імпортуйте 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;для некомплектних заходів


1

Рішення для Котліна (Android 3.3, Kotlin 1.3.20)

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

Не впевнений, чому це заперечують (я новачок у Котліні), але це спрацювало для мене там, де інші цього не зробили
Аллен Вікстед

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, тому його фрагмент, то AppBarLayout, а потім відносне розміщення / обмеження / лінійне залежно від того, що ви використовуєте.


0

Додайте це toolbar.getBackground().setAlpha(0);всередину до методу OnCreate. Додайте це: android:elevation="0dp" android:background="@android:color/transparent на xml файл панелі інструментів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.