Android开发:Toolbar覆盖ListView问题求助(附布局代码)
解决Toolbar覆盖ListView的问题
嘿,我来帮你搞定这个Toolbar盖住ListView的问题~
问题根源
你当前用的是RelativeLayout作为根布局,这个布局的子控件默认都是从左上角(布局原点)开始排列的,所以ListView会直接和Toolbar重叠在一起。而你尝试的app:layout_behavior="@string/appbar_scrolling_view_behavior"是CoordinatorLayout专属的属性,在RelativeLayout里根本不会生效,这就是为啥加了也没效果的原因。
解决方案一:给ListView添加RelativeLayout定位属性(最简单快速)
直接在ListView的布局代码里加上android:layout_below="@id/my_toolbar",让它固定在Toolbar的下方,这样就不会被覆盖了。修改后的View.xml里的ListView部分如下:
<ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tratamientoview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/my_toolbar"> <!-- 新增这一行 --> </ListView>
解决方案二:改用官方推荐的CoordinatorLayout结构(更适合滚动场景)
如果你的页面需要Toolbar和ListView有联动滚动(比如滚动时Toolbar隐藏/显示),推荐换成CoordinatorLayout + AppBarLayout的组合,这是Material Design里的标准布局方式,也能彻底解决重叠问题。修改后的View.xml大概是这样:
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.ismael.fisiopia.views.TratamientosActivity"> <!-- AppBar包裹Toolbar --> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <include layout="@layout/toolbar" /> </android.support.design.widget.AppBarLayout> <!-- 这里用app:layout_behavior就生效了 --> <ListView android:id="@+id/tratamientoview" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </ListView> <!-- FloatingActionButton和ProgressBar保持不变 --> <android.support.design.widget.FloatingActionButton android:id="@+id/btnAddTrat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_marginBottom="36dp" android:layout_marginRight="36dp" android:clickable="true" /> <RelativeLayout android:id="@+id/progressLayoutTrat" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#B0000000" android:visibility="gone"> <ProgressBar android:id="@+id/progressBarTratamientos" style="?android:attr/progressBarStyleLarge" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="13dp" android:layout_marginStart="13dp" android:paddingTop="250dp" android:visibility="gone" /> </RelativeLayout> </android.support.design.widget.CoordinatorLayout>
关于你的ProgressBar布局
那个嵌套在RelativeLayout里的ProgressBar布局没问题,它是全屏覆盖的样式,只要在代码里控制progressLayoutTrat的visibility属性就能正常显示加载遮罩,不用修改布局结构。
内容的提问来源于stack exchange,提问作者Isma9
相关产品推荐
相关产品推荐

