Android DrawerLayout实现抽屉效果

曾无好事来相访,赖尔高文一起予。这篇文章主要讲述Android DrawerLayout实现抽屉效果相关的知识,希望能为你提供帮助。
官网: https://developer.android.com/training/implementing-navigation/nav-drawer.html
贴上主要的逻辑和布局文件:
activity_main.xml

< ?xml version= " 1.0" encoding= " utf-8" ?> < android.support.v4.widget.DrawerLayout xmlns:android= " http://schemas.android.com/apk/res/android" android:id= " @ + id/drawer_layout" android:layout_width= " match_parent" android:layout_height= " match_parent" > < !-- content --> < FrameLayout android:id= " @ + id/drawer_container" android:layout_width= " match_parent" android:layout_height= " match_parent" /> < !-- Drawer--> < ListView android:id= " @ + id/drawer_menu" android:layout_width= " 240dp" android:layout_height= " match_parent" android:background= " #FFF0F0F0" android:layout_gravity= " start" /> < !-- android:choiceMode选中状态 跟onItemClick没有冲突 none值为0, 表示无选择模式; singleChoice值为1, 表示最多可以有一项被选中; multipleChoice值为2, 表示可以多项被选中。android:layout_gravityleft或rightleft或startright或end 表示在抽屉里的效果是从左到右还是从右到左出现 --> < /android.support.v4.widget.DrawerLayout>

这里需要注意一下: content主界面一定要定义在drawer的前面, 另外, android:layout_gravity= " start" ( 从左往右) 或者android:layout_gravity= " end" ( 从右往左) , 这个属性是必须要定义的, 不然出现下面的异常:
Android DrawerLayout实现抽屉效果

文章图片


MainActivity.java
package com.jackie.drawerlayoutdemo; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private String mTitle; private DrawerLayout mDrawerLayout; private ListView mDrawerMenu; @ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); //默认打开抽屉 mDrawerLayout.openDrawer(mDrawerMenu); }private void initView() { mTitle = getResources().getString(R.string.app_name); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerMenu = (ListView) findViewById(R.id.drawer_menu); }private void initData() { //数组定义在xml 文件中 String[] items = getResources().getStringArray(R.array.left_drawer_items); ArrayAdapter< String> adapter = new ArrayAdapter< > (this, android.R.layout.simple_expandable_list_item_1); adapter.addAll(items); mDrawerMenu.setAdapter(adapter); mDrawerMenu.setSelection(0); //设置点击item事件 mDrawerMenu.setOnItemClickListener(new AdapterView.OnItemClickListener() {@ Override public void onItemClick(AdapterView< ?> parent, View view, int position, long id) { mTitle = ((TextView) view).getText().toString(); switchFragment(); mDrawerLayout.closeDrawer(mDrawerMenu); mDrawerMenu.setSelection(position); } }); }private void switchFragment() { getSupportFragmentManager().beginTransaction().replace(R.id.drawer_container, new ItemFragment(mTitle)).commit(); getSupportActionBar().setTitle(mTitle); } }

效果图如下: 【Android DrawerLayout实现抽屉效果】
Android DrawerLayout实现抽屉效果

文章图片




    推荐阅读