在 androidX 工具栏上隐藏阴影
Hide Shadow on androidX Toolbar
我想隐藏 ActionBar
下方的阴影,使 ActionBar
看起来平坦。 ActionBar
与布局之间不能有线条、阴影、边框。
约束
- 不幸的是,我有一个约束条件,即必须涉及
ActionBar
。我不能简单地删除 ActionBar
并在屏幕顶部设置空白。
- 另一个限制是我想在运行时从代码切换阴影的可见性。
在 android.support.v7.widget.Toolbar
上对我有用的东西在 androidx.appcompat.widget.Toolbar
上对我不起作用。
我尝试了几种方法,例如
将 supportActionBar
的高度设置为 0 根本没有效果
将AppBarLayout
的elevation
设置为0完全没有效果
将Toolbar
的elevation
设置为0根本没有效果
将 alpha
设置为 0 会使 ActionBar
不可见,但我需要一个可见且正常运行的 UpButton
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
</com.google.android.material.appbar.AppBarLayout>
到目前为止,我没有任何效果。
唯一对我有用的是在代码中设置 AppBarLayout
的高度。不幸的是,在 Fragment
中,您需要知道自己在哪个 Activity
中,并且需要访问它的 AppBarLayout
,这会使代码变得丑陋。将来应该在 SupportActionbar
中有一个函数,比如 show/hideShadow() 左右。
长话短说。我对hide/show的影子做了什么ActionBar
在你的Activity
appBarLayout.elevation = 0f
在你的片段中
if (requireActivity is MyActivity) {
(activity as MyActivity).appBarLayout.elevation = 0f
}
请记住,如果您更改 Fragment 中的 ActionBar,则由同一 Activity 托管的所有其他 Fragment 也会看到更改。
另一个问题是在 Espresso 中测试您的片段将在没有 AppBarLayout
的 EmptyActivity 中启动。但至少使用上面的代码你的应用程序不会崩溃。
我想隐藏 ActionBar
下方的阴影,使 ActionBar
看起来平坦。 ActionBar
与布局之间不能有线条、阴影、边框。
约束
- 不幸的是,我有一个约束条件,即必须涉及
ActionBar
。我不能简单地删除ActionBar
并在屏幕顶部设置空白。 - 另一个限制是我想在运行时从代码切换阴影的可见性。
在 android.support.v7.widget.Toolbar
上对我有用的东西在 androidx.appcompat.widget.Toolbar
上对我不起作用。
我尝试了几种方法,例如
将
supportActionBar
的高度设置为 0 根本没有效果将
AppBarLayout
的elevation
设置为0完全没有效果将
Toolbar
的elevation
设置为0根本没有效果将
alpha
设置为 0 会使ActionBar
不可见,但我需要一个可见且正常运行的 UpButton<com.google.android.material.appbar.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/> </com.google.android.material.appbar.AppBarLayout>
到目前为止,我没有任何效果。
唯一对我有用的是在代码中设置 AppBarLayout
的高度。不幸的是,在 Fragment
中,您需要知道自己在哪个 Activity
中,并且需要访问它的 AppBarLayout
,这会使代码变得丑陋。将来应该在 SupportActionbar
中有一个函数,比如 show/hideShadow() 左右。
长话短说。我对hide/show的影子做了什么ActionBar
在你的Activity
appBarLayout.elevation = 0f
在你的片段中
if (requireActivity is MyActivity) {
(activity as MyActivity).appBarLayout.elevation = 0f
}
请记住,如果您更改 Fragment 中的 ActionBar,则由同一 Activity 托管的所有其他 Fragment 也会看到更改。
另一个问题是在 Espresso 中测试您的片段将在没有 AppBarLayout
的 EmptyActivity 中启动。但至少使用上面的代码你的应用程序不会崩溃。