2

我正在使用 Android appcompat 库来创建自定义操作栏。这一切都有效。在不使用 v11 主题(值文件夹)的设备上,不会出现不应出现的底部边框。但是当 v11+ 设备使用主题(当然在 values-v11 文件夹中)时,会有一个底部边框。这是一个 1dp 类型的细边框。我为操作栏应用了一个自定义背景,这一切都适用于版本 < v11,只是在 v11+ 设备上添加了一个烦人的额外底部边框;-]

现在我通过另一篇 SO 文章发现用户使用 ActionBarSherlock 的基本主题需要是 Theme.X 而不是 theme.X.Light.x 来解决这个问题(没有解释为什么)。我应用了同样的逻辑(我使用的是 android 的 appcompat,而不是 sherlock 的),它适用于删除边框,但随后出现了其他样式问题,例如单选按钮等,采用了非浅色主题。所以我想将基本主题保留为“Theme.AppCompat.Light”,并去掉操作栏上的底部边框。同样,它不会出现在 < v11 的设备上。

屏幕截图(Theme.AppCompat.Light/Theme.AppCompat):

我的主题(在 values 文件夹中相同减去 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>
4

3 回答 3

14

通过 SO 的力量,我的问题终于得到了解答!在过去的两天里,我尝试了以下链接中的 OP 的所有尝试以及更多。不知何故,我没有看到这个 SO 线程(我没有使用搜索词'divider',我想)。

对我有用的是将 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>
于 2014-01-09T01:49:31.543 回答
2

如果 user2545146 答案在棒棒糖上不起作用。

从活动中调用操作栏上的 setElevation。

getSupportActionBar().setElevation(0);

于 2015-02-11T18:52:52.320 回答
0

唯一对我有用的是

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

仅 API >= 21

于 2019-08-21T19:10:54.383 回答