前言:最近在仿写网易云音乐安卓端界面,记录下所遇到的问题及解决方案


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"

更多相关文章

  1. 利用convertView优化ListView性能
  2. xamarin开发Android程序示例
  3. Android最全的屏幕适配
  4. android一行显示多个多选框
  5. Android开发学习 之 五、基本界面控件
  6. android的Spinner控件的自定义样式设置以及ArrayAdapter的使用
  7. android开发之四种基本布局和自定义控件
  8. Android约束布局ConstraintLayout动态设置Id失效问题解决办法
  9. Android实现修改状态栏颜色

随机推荐

  1. travis-ci如何配置android
  2. android上tcpdump 抓包
  3. Android之ViewFlipper的使用与ListView的
  4. Android的界面设计工具 DroidDraw
  5. Android清理后台所有历史App任务
  6. Android拍照、录像、录音代码范例
  7. Android倒计时实现
  8. 2013.11.19 ——— android 获取本地ip地
  9. Android中的onTouch事件
  10. Android 强制停止RecyclerView滑动方法