一、介绍
DrawerLayout是Android官方提供的支持侧拉菜单(Navigation Drawer)的控件。该控件可以轻松地实现左右两侧的侧拉菜单,是常规Android应用的重要组成部分。在本文中,我们将详细介绍如何通过使用DrawerLayout控件来实现侧拉菜单功能。
二、基本用法
DrawerLayout实现侧拉菜单的基本组成部分如下:
- 一个主界面(即DrawerLayout的根布局)。
- 一个侧滑菜单界面(通常放在左边)。
- 一个主内容界面(通常放在右边)。
DrawerLayout的使用非常简单,只需要将菜单布局文件和主界面布局文件放在一个DrawerLayout容器中即可。
三、实现步骤
下面我们将具体介绍如何在Android应用中使用DrawerLayout控件实现侧拉菜单功能。
步骤1:添加DrawerLayout控件
在需添加侧拉菜单的布局文件中添加一个DrawerLayout布局文件。
<?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">
</android.support.v4.widget.DrawerLayout>
步骤2:添加侧滑菜单
在DrawerLayout布局文件中,添加一个侧滑菜单布局文件。
<?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">
<!-- 左边的菜单 -->
<RelativeLayout
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white">
侧拉菜单内容...
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
步骤3:添加主内容界面
在DrawerLayout布局文件中,添加主内容界面布局文件。
<?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">
<!-- 左边的菜单 -->
<RelativeLayout
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white">
侧拉菜单内容...
</RelativeLayout>
<!-- 主内容界面 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
主内容界面...
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
步骤4:设置ActionBar
使用ActionBarDrawerToggle类将DrawerLayout控件和ActionBar关联起来,实现ActionBar的显示/隐藏和打开/关闭侧滑菜单的功能。
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getActionBar().setTitle(R.string.drawer_open);
}
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
getActionBar().setTitle(R.string.drawer_close);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
四、常见问题解决
一、多个侧滑菜单
如果需要实现左右两侧都有菜单的效果,可以使用两个DrawerLayout组件。需要注意的是,在代码和布局文件中,两个DrawerLayout各自管理自己的侧滑菜单和主内容界面。
二、menu菜单
如果想要在侧拉栏中添加菜单项,可以使用menu菜单实现。具体实现方法是在res下新建一个menu文件夹,并在该文件夹中创建一个menu.xml文件,然后在DrawerLayout布局文件中添加如下代码:
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
android:choiceMode="singleChoice"
android:divider="@android:color/darker_gray"
android:dividerHeight="0.1dp" />
然后在Activity的onCreate方法中添加以下代码:
//找到listview并设置其Adapter
ListView listView = (ListView) findViewById(R.id.left_drawer);
listView.setAdapter(new ArrayAdapter(this,
android.R.layout.simple_list_item_1,
mPlanetTitles));
//设置listview的列表项被单击的事件处理方法
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
selectItem(position);
}
});
三、禁用手势滑动
有时候,我们需要禁用手势滑动打开侧滑菜单的功能。可以通过设置setDrawerLockMode方法实现。
//禁止手势滑动
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
四、主内容界面进行透明处理
如果需要将主内容界面进行透明处理,可以在主内容界面布局文件中添加如下代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" >
...
</LinearLayout>
五、更改侧栏菜单的图标
如果需要更改侧栏菜单的图标,可以在ActionBarDrawerToggle类的构造函数中传入自定义的图标资源文件。
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.your_icon_res, R.string.drawer_open, R.string.drawer_close) {
...
};
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/280708.html
微信扫一扫
支付宝扫一扫