首先创建一个布局文件,根布局设置为 android.support.v4.widger.DrawerLayout ,DrawerLayout 的第一个子布局为主布局 通常是FrameLayout,第二个布局为侧栏布局 通常为ListView
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- The main view-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frame_layout">
</FrameLayout>
<!--The navigation view-->
<ListView
android:layout_width="250dp"
android:layout_height="match_parent"
android:id="@+id/left_drawer"
android:layout_gravity="start"
android:background="#ffffcc"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
>
</ListView>
</android.support.v4.widget.DrawerLayout>
第二个布局要设置一个重要的属性,android:layout_gravity="start" 该属性为start是,导航栏从左侧滑出,属性设置为end 时,导航栏从右侧滑出。
一般情况下 FrameLayout 为主布局,通常点击不同的菜单,就替换一个不同的Fragment:
初始化布局代码为:
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ArrayList<String> menuList;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drawer_layout);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
menuList = new ArrayList<String>();
for (int i = 0; i < 5; i++)
menuList.add("Item" + i);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, menuList);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(this);
}
如果是一个包含ActionBar 的Activity 还可以通过实现 DrawerListener 来监听Navigation 的打开和关闭, ActionBarDrawerToggle 是DrawerListener的实现类