Android之侧滑菜单DrawerLayout
- 目前侧滑菜单已广泛应用于各大应用,这一菜单形式简洁明了,深受用户的喜爱。在谷歌官方推出 DrawerLayout 之前,开发者大都通过 SlidingMenu 开源库来实现这一功能。而现在 DrawerLayout 被谷歌包含在了 android-support-v4.jar 这个包下,可以让开发者更简单方便的实现侧滑菜单这一功能。
- Google I/O 2013Android更新了Support库,Support Library包中实现了侧滑菜单效果的控件---drawerLayout,支持创建 Navigation Drawer(导航抽屉)模式。
- drawerLayout其实是一个布局控件,跟LinearLayout等控件是一种东西,但是drawerLayout带有滑动的功能。只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效果。
- drawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化(这需要使用者自己实现)。这个东西主要的原理就是左边是一个ListView(抽屉菜单),右边是一个FrameLayout.(用来显示页面的主要内容)。
- 在需要抽屉菜单的界面,用DrawerLayout 作为界面根控件。在DrawerLayout里面第一个View为当前界面主内容;第二个和第三个View为抽屉菜单内容。如果当前界面只需要一个抽屉菜单,则第三个View可以省略
- 具体可参考以下链接,官方的开发页是:
Android Navigation Drawer Design :
http://developer.android.com/design/patterns/navigation-drawer.html
Android Navigation Drawer 教程:
https://developer.android.com/training/implementing-navigation/nav-drawer.html(包含官方Demo的实例 大家也可以自己下载看一下)接下来附上完整的drawerLayout的例子,来源于官方网站的demo
Activity:
package com.example.android.navigationdrawerexample;
import java.util.Locale;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.SearchManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] mPlanetTitles;
@Override
protected void onCreate(Bundle savedInstanceState) {