Пользовательская панель действий Android appcompat: как удалить нижнюю границу на устройствах v11+

Я использую библиотеку Android appcompat для создания пользовательской панели действий. Это все работает. На устройствах, не использующих тему v11 (папка значений), нижняя граница не отображается, как не должна. Но когда устройства v11+ используют тему (конечно, в папке values-v11), появляется нижняя граница. Это тонкая рамка типа 1dp. У меня есть собственный фон для панели действий, и все это работает в версии ‹ v11, на устройствах v11+ добавляется только раздражающая дополнительная нижняя граница ;-]

Теперь я обнаружил в другой статье SO, где пользователь использовал ActionBarSherlock, что для решения этой проблемы базовой темой должна быть Theme.X, а не theme.X.Light.x (без объяснения причин). Я применил ту же логику (я использую appcompat для Android, а не приложение для Шерлока), и это сработало для удаления границы, но затем возникли другие проблемы со стилем с переключателями и т. Д., Принимая несветлую тему. Поэтому я хочу сохранить базовую тему как «Theme.AppCompat.Light» и избавиться от нижней границы на панели действий. Опять же, он не отображается на устройствах ‹ v11.

Снимки экрана (Theme.AppCompat.Light/Theme.AppCompat):

Моя тема (то же самое в папке значений за вычетом префикса Android):

    <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Application theme. -->
    <style name="ActionTheme" parent="@style/Theme.AppCompat.Light">           
        <item name="android:actionBarStyle">@style/ActionBarStyle</item>         
        <item name="android:windowActionBar">true</item>  
    </style>

   <style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar">     
       <item name="android:displayOptions"></item>           
        <item name="android:background">@drawable/header_style</item>         
         <item name="android:titleTextStyle">@style/ActionBarTitleText</item>  
        <item name="android:layout_height">wrap_content</item> 
        <item name="android:layout_width">wrap_content</item>   
        <item name="android:height">70dp</item> 
     </style>

    <style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/color_dark_blue</item>           
    </style>     
</resources>

person user2545146    schedule 03.01.2014    source источник
comment
Я нашел ответ и опубликую ответ, когда моя 8-часовая задержка будет достигнута (правило SO). Просто чтобы никто не тратил время на то, чтобы решить это...   -  person user2545146    schedule 03.01.2014


Ответы (3)


Благодаря силе ТАК на мой вопрос наконец-то был дан ответ! Я пробовал все, что пробовал ОП по ссылке ниже, и даже больше за последние два дня. Почему-то я не видел эту ветку SO (мне кажется, я не использовал поисковый запрос «разделитель»).

Что сработало для меня, так это установить для свойства no window overlay значение null. Я вижу, что настройка цвета окна может работать и на некоторых более поздних версиях Android (4.2.x+), поэтому я решил установить оба. Вот ссылка SO с решением (решениями) этой неприятной функции (ошибка?): ссылка

Мои окончательные значения-v11/themes.xml -

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Application theme. -->
    <style name="ActionTheme" parent="@style/Theme.AppCompat.Light">           
        <item name="android:actionBarStyle">@style/ActionBarStyle</item>         
        <item name="android:windowActionBar">true</item>  
        <item name="android:windowBackground">@android:color/white</item> 
        <item name="android:windowContentOverlay">@null</item>
    </style>

   <style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar">     
       <item name="android:displayOptions"></item>           
        <item name="android:background">@drawable/header_style</item>         
         <item name="android:titleTextStyle">@style/ActionBarTitleText</item>  
        <item name="android:layout_height">wrap_content</item> 
        <item name="android:layout_width">wrap_content</item>   
        <item name="android:height">70dp</item>  
     </style>

    <style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/color_dark_blue</item>           
    </style>     
</resources>
person user2545146    schedule 09.01.2014

Если ответ пользователя 2545146 не работает на леденце.

вызовите setElevation на панели действий из действия.

getSupportActionBar().setElevation(0);

person chamikaw    schedule 11.02.2015

Единственное, что сработало для меня, это

AppBarLayout appBarLayout = findViewById(R.id.my_app_bar_layout);
appBarLayout.setOutlineProvider(null);

api >= только 21

person Inoy    schedule 21.08.2019