利用DrawerLayout實現簡單的抽屜效果,drawerlayout抽屜
前言,本篇文章是最基礎的利用DrawerLayout實現抽屜效果,我也是盡量精簡到了最高效的代碼,後面我會貼出其他比較複雜的功能。
先看
標題列中的文字,會根據點擊item的不同,而顯示不同的樣式。
直接上代碼。
下面是activity_main的代碼
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <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" > <!-- 當前主介面顯示內容視圖 --> <!-- 主內容必須是DrawerLayout的第一個元素,因為它將第一個顯示,並且抽屜必須在內容之上 --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- 隱藏式瀏覽選單視圖 --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="@android:color/holo_red_dark" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="5dp" /> </android.support.v4.widget.DrawerLayout></RelativeLayout>
- 抽屜菜單的寬度為
dp 單位而高度和父View一樣。抽屜菜單的寬度應該不超過320dp,這樣使用者可以在菜單開啟的時候看到部分內容介面。
接下來是MainActivity代碼
package com.example.chouti;import android.os.Bundle;import android.app.Activity;import android.content.res.Configuration;import android.view.MenuItem;import android.view.View;import android.view.Window;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListView;import android.support.v4.app.ActionBarDrawerToggle;import android.support.v4.view.GravityCompat;import android.support.v4.widget.DrawerLayout;public class MainActivity extends Activity {private String[] mPlanetTitles = { "hahhooo", "jdahldfj", "這是真的嗎","這應該是真的", "4", "jdahldfj", "這是真的嗎", "這應該是真的", "jdahldfj", "這是真的嗎","這應該是真的" };private DrawerLayout mDrawerLayout;private ActionBarDrawerToggle mDrawerToggle;private ListView mDrawerList;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);// 初始化ListView和適配資料initListView(); //mDrawerLayout.setDrawerShadow(R.drawable.ic_launcher, GravityCompat.START); //初始化ActionBarDrawerTogglemDrawerToggle = new ActionBarDrawerToggle(this,//顯示抽屜的Activity對象mDrawerLayout,//DrawerLayout 對象R.drawable.ic_launcher, //一個用來指示抽屜的 drawable資源(如果想顯示這個表徵圖的話,必須重寫onPostCreate(Bundle savedInstanceState))R.string.hello_world,//一個用來描述開啟抽屜的文本 (用於支援可訪問性)R.string.hello_world);//一個用來描述關閉抽屜的文本(用於支援可訪問性)// 將ActionBarDrawerToggle設定為DrawerListenermDrawerLayout.setDrawerListener(mDrawerToggle);// ActionBar操作模式開啟(調用這個方法,點擊表徵圖才會有響應)getActionBar().setDisplayHomeAsUpEnabled(true);getActionBar().setHomeButtonEnabled(true);// 注意: getActionBar() 添加是在 API level 11}//這裡就是onPostCreate(Bundle savedInstanceState)方法//@Override//protected void onPostCreate(Bundle savedInstanceState) {////super.onPostCreate(savedInstanceState);//mDrawerToggle.syncState();//}private void initListView() {mDrawerList = (ListView) findViewById(R.id.left_drawer);// 適配資料mDrawerList.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mPlanetTitles));// 為listView設定監聽事件mDrawerList.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// 更新標題,並關閉抽屜setTitle(mPlanetTitles[position]);mDrawerLayout.closeDrawer(mDrawerList);}});}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {//傳遞事件給ActionBarDrawerToggle,如果返回true,它將處理表徵圖響應事件if (mDrawerToggle.onOptionsItemSelected(item)) {return true;}//處理其他動作點擊條目return super.onOptionsItemSelected(item);}}
關於ActionBar相關知識,如果你想進一步瞭解,請點擊這裡http://blog.csdn.net/harryweasley/article/details/42027521關於DrawerLayout更詳細的解說,你可以點擊這裡http://blog.csdn.net/harryweasley/article/details/42027487
或者http://blog.csdn.net/harryweasley/article/details/42027563
以上三個文章都是我轉載的,協助我完成上面項目的。