Android(安卓)Widget:DrawerLayout配合Toolbar的使用及常见问题
16lz
2021-01-26
前言:最近在仿写网易云音乐安卓端界面,记录下所遇到的问题及解决方案
DrawerLayout的基础使用
DrawerLayout经常配合NavigationView及Toolbar使用,编写侧滑栏
1.首先添加支持
implementation 'com.android.support:design:28.0.0'
2.编写布局
- DrawerLayout是一种布局控件,类似LinearLayout,但最好作为根布局使用
- DrawerLayout布局中默认有两个控件,第一个是主界面的布局/控件,第二个是侧滑栏中的布局(经常使用NavigationView)
- 侧滑栏中的布局/控件必须设置layout_gravity属性。设置了layout_gravity="start/left"的视图才会被认为是侧滑菜单,表示侧滑菜单是在左边还是右边,如果不设置,在打开关闭侧滑栏的时候会出错
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout android:id="@+id/dl_homePage" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar android:id="@+id/tb_title" android:fitsSystemWindows="true" android:background="@color/colorNetease" android:layout_width="match_parent" android:layout_height="wrap_content"> android.support.v7.widget.Toolbar> <android.support.v4.view.ViewPager android:id="@+id/vp_main" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> android.support.v4.view.ViewPager> LinearLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/moudule_menu_drawerlayout" app:headerLayout="@layout/module_headerlayout_navigation"> android.support.design.widget.NavigationView> android.support.v4.widget.DrawerLayout>
3.在逻辑中监听事件打开侧滑栏
public class MainActivity extends AppCompatActivity { private Button btn_openDrawer; private DrawerLayout drawerLayout;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.module_activity_main); btn_openDrawer = findViewById(R.id.btn_openDrawer); btn_openDrawer.setOnClickListener((view)->drawerLayout.openDrawer(GravityCompat.START);); //这里传入GravityCompat.START因为layout_gravity属性设置为start}}
基本方法
boolean isDrawerOpen(@EdgeGravity int drawerGravity): 判断菜单是否打开openDrawer(@EdgeGravity int gravity) : 打开菜单closeDrawer(@EdgeGravity int gravity) : 关闭菜单以上三个方法传入参数:GravityCompat.START : 左边菜单GravityCompat.END : 右边菜单addDrawerListener(@NonNull DrawerListener listener) : 添加监听DrawerListener 类onDrawerSlide(View drawerView, float slideOffset): 滑动时调用onDrawerOpened(View drawerView): 打开菜单时调用onDrawerClosed(View drawerView): 关闭菜单时调用onDrawerStateChanged(@State int newState): 菜单状态改变时调用
配合Toobar的使用
用Toolbar代替ActionBar并设置home键用于调出DrawerLayout
常见问题
1.将侧滑栏高度延伸至状态栏
step one:侧滑栏所在Activity中onCreate方法中加入以下代码使状态栏透明if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.TRANSPARENT); } getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);step two:对应xml文件DrawerLayout布局中设置属性android:fitsSystemWindows="true"
更多相关文章
- 利用convertView优化ListView性能
- xamarin开发Android程序示例
- Android最全的屏幕适配
- android一行显示多个多选框
- Android开发学习 之 五、基本界面控件
- android的Spinner控件的自定义样式设置以及ArrayAdapter的使用
- android开发之四种基本布局和自定义控件
- Android约束布局ConstraintLayout动态设置Id失效问题解决办法
- Android实现修改状态栏颜色