启动带有 viewpager 的片段时从工具栏中删除阴影
Remove shadow from toolbar when fragment with viewpager is launched
我的 MainActivity
实现了 NavigationView
,因此屏幕的大部分内容都在 FrameLayout
中。在其中一个 Fragments
中,我有一个 ViewPager
,我希望当 Fragment
启动时,Toolbar
中的 elevation
被删除,否则重新添加。
我的目标API是29,我不在乎是否支持旧版本。
activity_main.xml
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/toolbar"/>
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<include layout="@layout/navigation_drawer"/>
</androidx.drawerlayout.widget.DrawerLayout>
fragment_view_pager.xml
<androidx.viewpager.widget.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabs_vp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs_tl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="4dp"
android:background="?android:attr/colorPrimary">
</com.google.android.material.tabs.TabLayout>
</androidx.viewpager.widget.ViewPager>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appcompat_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/toolbar"/>
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
<include
layout="@layout/toolbar"/>
</LinearLayout>
<FrameLayout
android:id="@+id/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
这里我拍了两张-
AppBarLayout(里面有工具栏)- android:id="@+id/appcompat_layout"
LinearLayout(里面有工具栏)-
android:id="@+id/toolbar_layout"
现在你要做的是,当你的 Fragment 启动时,让 toolbar_layout 可见,appcompat_layout 不可见,否则 vice-versa.
最初在 Activity 启动期间,保持 appcompat_layout 可见和 toolbar_layout 不可见
干杯!
删除海拔
toolbar.setElevation(0f);
用于添加海拔
toolbar.setElevation(your float number);
我认为这是最简单的答案,在 ViewPager
片段中:
private var myElevation: Float? = null
override fun onCreateView(/* params */) {
// other code
myElevation = activity!!.app_bar_id.elevation
activity!!.app_bar_id.elevation = 0f
}
override fun onDestroyView() {
super.onDestroyView()
activity!!.app_bar_id.elevation = myElevation!!
}
这样,仅当 ViewPager
片段处于活动状态时,海拔为 0
。
在您的 activity XML 中,只需将 app:elevation="0dp" 属性添加到 AppBarLayout。这将导致此 activity 下的所有片段都不会提升。在这里,我为片段容器使用框架布局。
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>
我的 MainActivity
实现了 NavigationView
,因此屏幕的大部分内容都在 FrameLayout
中。在其中一个 Fragments
中,我有一个 ViewPager
,我希望当 Fragment
启动时,Toolbar
中的 elevation
被删除,否则重新添加。
我的目标API是29,我不在乎是否支持旧版本。
activity_main.xml
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/toolbar"/>
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<include layout="@layout/navigation_drawer"/>
</androidx.drawerlayout.widget.DrawerLayout>
fragment_view_pager.xml
<androidx.viewpager.widget.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabs_vp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs_tl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="4dp"
android:background="?android:attr/colorPrimary">
</com.google.android.material.tabs.TabLayout>
</androidx.viewpager.widget.ViewPager>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appcompat_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/toolbar"/>
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
<include
layout="@layout/toolbar"/>
</LinearLayout>
<FrameLayout
android:id="@+id/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
这里我拍了两张-
AppBarLayout(里面有工具栏)- android:id="@+id/appcompat_layout"
LinearLayout(里面有工具栏)- android:id="@+id/toolbar_layout"
现在你要做的是,当你的 Fragment 启动时,让 toolbar_layout 可见,appcompat_layout 不可见,否则 vice-versa.
最初在 Activity 启动期间,保持 appcompat_layout 可见和 toolbar_layout 不可见
干杯!
删除海拔
toolbar.setElevation(0f);
用于添加海拔
toolbar.setElevation(your float number);
我认为这是最简单的答案,在 ViewPager
片段中:
private var myElevation: Float? = null
override fun onCreateView(/* params */) {
// other code
myElevation = activity!!.app_bar_id.elevation
activity!!.app_bar_id.elevation = 0f
}
override fun onDestroyView() {
super.onDestroyView()
activity!!.app_bar_id.elevation = myElevation!!
}
这样,仅当 ViewPager
片段处于活动状态时,海拔为 0
。
在您的 activity XML 中,只需将 app:elevation="0dp" 属性添加到 AppBarLayout。这将导致此 activity 下的所有片段都不会提升。在这里,我为片段容器使用框架布局。
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>