1建立Drawer Layout
在需要抽屜菜單的介面,用DrawerLayout 作為介面根控制項。在DrawerLayout裡面第一個View為當前介面主內容;第二個和第三個View為抽屜菜單內容。如果當前介面只需要一個抽屜菜單,則第三個View可以省略。
下面的例子中DrawerLayout裡麵包含兩個View,第一個FrameLayout中是當前介面主要內容顯示地區;第二個ListView為抽屜菜單內容。
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"><FrameLayout android:id="@+id/frame_layout" android:layout_width="match_parent" android:layout_height="match_parent" ></FrameLayout> <ListView android:id="@+id/listview" android:layout_width="240dp" android:layout_height="match_parent" android:background="#FFFFFF" android:choiceMode="singleChoice" android:layout_gravity="start" /></android.support.v4.widget.DrawerLayout>
上面的代碼中有如下幾點需要注意:
3監聽菜單開啟關閉事件
如果需要監聽菜單開啟關閉事件,則需要調用
DrawerLayout類的
setDrawerListener() 函數,參數為
DrawerLayout.DrawerListener介面的實現。該介面提供了菜單開啟關閉等事件的回呼函數,例如
onDrawerOpened() 和onDrawerClosed().
如果您的Activity使用了
action bar,則您可以使用Support庫提供的 ActionBarDrawerToggle 類,該類實現了
DrawerLayout.DrawerListener介面,並且您還可以根據需要重寫相關的函數。該類實現了菜單和Action bar相關的操作。
根據在
Navigation Drawer 設計指南中的介紹,當菜單顯示的時候您應該根據情況隱藏ActionBar上的功能菜單並且修改ActionBar的標題。
關鍵代碼:
package com.tao.drawerlayout;import android.os.Bundle;import android.support.v4.app.ActionBarDrawerToggle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentTransaction;import android.support.v4.widget.DrawerLayout;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends FragmentActivity { ListView myListview; DrawerLayout drawerLayout; List<String> list; CharSequence title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myListview = (ListView)findViewById(R.id.listview); drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); list = new ArrayList<String>(); for (int i = 0;i<10;i++){ list.add("item"+(i+1)); } ListAdapter listAdapter = new ListAdapter(this,list); myListview.setAdapter(listAdapter); drawerLayout.setDrawerListener(new ActionBarDrawerToggle(this,drawerLayout,R.drawable.ic_launcher,R.string.open,R.string.close){ @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); invalidateOptionsMenu(); } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); getActionBar().setTitle(title); invalidateOptionsMenu(); } }); myListview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { MyFragment myFragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString("content",list.get(i)); myFragment.setArguments(bundle); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.frame_layout,myFragment).commit(); title = list.get(i); myListview.setItemChecked(i,true); drawerLayout.closeDrawer(myListview); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
本文參考了雲在千峰的文章。如果需要代碼可以給我留言