DrawerLayout 提供
1、当界面弹出的时候,主要内容区会自动背景变黑,当点击内容区的时候,抽屉布局会消失
2、在屏幕边缘手势滑动 会拉出抽屉布局注意:当按后退键的时候,如果抽屉布局正在显示,则需要关闭抽屉布局
首先布局文件:
布局分为三部分,左中右。中间的是APP显示的主要内容区,然后看你个人的需求来选择是要左边弹出布局,还是右边弹出布局。
如果选择是左边弹出界面还是右边弹出界面,只要给弹出界面设设置
自动打开抽屉
mdrawerLayout.openDrawer(Gravity.LEFT);//这里设置的方向应该跟下面xml文件里面的gravity方向相同,不然会报错,start和LEFT都为从左边出现
mdrawerLayout.closDrawers();//没有参数,关闭所有的出现的抽屉
//xml布局<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer" 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:layout_width="match_parent" android:layout_height="match_parent" tools:context="l.drawerlayoutdemo.MainActivity"> <FrameLayout android:id="@+id/fl" android:layout_width="match_parent" android:layout_height="match_parent"/> <ListView android:id="@+id/lv" android:background="#FF0000" android:layout_gravity="start" android:choiceMode="singleChoice" android:layout_width="150dp" android:layout_height="match_parent"/> </android.support.v4.widget.DrawerLayout>//侧滑布局必须写android:layout_gravity="start" android:choiceMode="singleChoice"package l.drawerlayoutdemo; import android.graphics.drawable.DrawableWrapper; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lv; private DrawerLayout drawer; private List<String> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); indata(); //获取控件 lv = (ListView)findViewById(R.id.lv); //获取侧滑控件 drawer = (DrawerLayout)findViewById(R.id.drawer); //点击事件 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { //获取子布局里的静态方法 MFragment getname = MFragment.getname(list.get(i)); //管理事务 开启事务 提交事务 getSupportFragmentManager().beginTransaction().replace(R.id.fl,getname).commit(); //关闭侧滑 drawer.closeDrawer(lv); } });//侧滑的点击事件 drawer.addDrawerListener(new DrawerLayout.DrawerListener() { //当抽屉被滑动的时候调用此方法//slideOffset 表示 滑动的幅度(0-1) @Override public void onDrawerSlide(View drawerView, float slideOffset) { } //侧滑的开启事件 @Override public void onDrawerOpened(View drawerView) { Toast.makeText(MainActivity.this,"开启侧滑",Toast.LENGTH_LONG).show(); } //侧滑的关闭事件 @Override public void onDrawerClosed(View drawerView) { Toast.makeText(MainActivity.this,"关闭侧滑",Toast.LENGTH_LONG).show(); } @Override public void onDrawerStateChanged(int newState) { } });//获取适配器lv.setAdapter(new BaseAdapter() {@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int i) {return null;
}@ Overridepublic long getItemId(int i) {return 0;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {if(view==null){view=View.inflate(MainActivity.this,R.layout.f1,null);}TextView tv = view.findViewById(R.id.tv);
tv.setText(list.get(i));
return view;
}});}//初始值private void indata() {list = new ArrayList<>();for (int i=0;i<10;i++) {list.add("drawer++"+i);}}}
//点击侧滑菜单传参
/** * Created by lenovo on 2017/11/9. */ //写一个方法类 public class MFragment extends Fragment{ @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View inflate = inflater.inflate(R.layout.f2, container, false); //获取控件 TextView tvv = (TextView)inflate.findViewById(R.id.tvv); //undle获取穿过来的值` Bundle bundle = getArguments(); //获取键值 String name =(String) bundle.get("name"); //赋值 tvv.setText(name); return inflate; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } //自己调自己自己调自己的方法 public static MFragment getname(String s){ //实力化自己 MFragment m=new MFragment(); //实力化一个bundle Bundle bundle=new Bundle(); // 向bundle向里存之 bundle.putString("name",s); m.setArguments(bundle); return m; } }
自动打开抽屉
mdrawerLayout.openDrawer(Gravity.LEFT);//这里设置的方向应该跟下面xml文件里面的gravity方向相同,不然会报错,start和LEFT都为从左边出现
mdrawerLayout.closDrawers();//没有参数,关闭所有的出现的抽屉