DrawerLayout 侧滑菜单

来源:互联网 发布:见父自然知孝 编辑:程序博客网 时间:2024/05/21 20:41
DrawerLayout 提供
1、当界面弹出的时候,主要内容区会自动背景变黑,当点击内容区的时候,抽屉布局会消失
2、在屏幕边缘手势滑动 会拉出抽屉布局

注意:当按后退键的时候,如果抽屉布局正在显示,则需要关闭抽屉布局

首先布局文件:
布局分为三部分,左中右。中间的是APP显示的主要内容区,然后看你个人的需求来选择是要左边弹出布局,还是右边弹出布局。
如果选择是左边弹出界面还是右边弹出界面,只要给弹出界面设设置


自动打开抽屉

mdrawerLayout.openDrawer(Gravity.LEFT);//这里设置的方向应该跟下面xml文件里面的gravity方向相同,不然会报错,start和LEFT都为从左边出现

mdrawerLayout.closDrawers();//没有参数,关闭所有的出现的抽屉

<android.support.v4.widget.DrawerLayout        android:id="@+id/dl"        android:layout_width="match_parent"        android:layout_height="match_parent">        <!-- 界面主要内容布局区 -->        <FrameLayout            android:id="@+id/fl"            android:layout_width="match_parent"            android:layout_height="match_parent"></FrameLayout>        <!-- 左边弹出布局区 -->        <!--        和drawerLayout配合需要配这两个属性        android:layout_gravity="left" //这个值必须要指定,start是从左侧拖拽出菜单,end是从右侧         android:choiceMode="singleChoice"       -->        <ListView            android:id="@+id/lv"            android:layout_gravity="left"            android:choiceMode="singleChoice"            android:layout_width="match_parent"            android:layout_height="match_parent"></ListView>    </android.support.v4.widget.DrawerLayout>
//主方法

public class MainActivity extends AppCompatActivity {    FrameLayout fl;    private ListView lv;    private DrawerLayout dl;    private ArrayList<String> lists;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lv = findViewById(R.id.lv);        fl = (FrameLayout) findViewById(R.id.fl);        dl = findViewById(R.id.dl);        //获取数据给listview加数据        initData();        //ListView的点击监听事件        setListener();        //DrawerLayout的监听        setDrawerLayoutListener();    }    private void setDrawerLayoutListener() {        /**         * 当抽屉滑动状态改变的时候被调用         * 状态值是STATE_IDLE(闲置--0), STATE_DRAGGING(拖拽的--1), STATE_SETTLING(固定--2)中之一。         * 抽屉打开的时候,点击抽屉,drawer的状态就会变成STATE_DRAGGING,然后变成STATE_IDLE         */        dl.setDrawerListener(new DrawerLayout.DrawerListener() {            /**             * 当抽屉被滑动的时候调用此方法             * slideOffset 表示 滑动的幅度(0-1)             */            @Override            public void onDrawerSlide(View drawerView, float slideOffset) {                Log.i("drawer", slideOffset + "");            }            /**             * 当一个抽屉被完全打开的时候被调用             */            @Override            public void onDrawerOpened(View drawerView) {                Log.i("drawer", "抽屉被完全打开了!");            }            /**             * 当一个抽屉完全关闭的时候调用此方法             */            @Override            public void onDrawerClosed(View drawerView) {                Log.i("drawer", "抽屉被完全关闭了!");            }            @Override            public void onDrawerStateChanged(int newState) {                Log.i("drawer", "drawer的状态:" + newState);            }        });    }    private void initData() {        lists = new ArrayList<>();        for (int i = 0; i < 5; i++) {            lists.add("DrawerLayout"+i);        }        ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, lists);        lv.setAdapter(stringArrayAdapter);    }    private void setListener() {        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                f1 f1=new f1();                Bundle b=new Bundle();                b.putString("list", lists.get(i));                f1.setArguments(b);                getSupportFragmentManager().beginTransaction().replace(R.id.fl,f1).commit();                //关闭drawer                dl.closeDrawer(lv);            }        });    }}



原创粉丝点击