Android開發之Navigationdrawer隱藏式瀏覽選單功能的實現(原始碼分享)

來源:互聯網
上載者:User

標籤:android   navigationdrawer   listview   導航   actionbar   

     隱藏式瀏覽選單(navigationdrawer)是一個從螢幕左邊滑入的面板,用於顯示應用的主要導航項目。使用者可以通過在螢幕左邊緣滑入或者觸摸操作欄的應用表徵圖開啟隱藏式瀏覽選單。隱藏式瀏覽選單覆蓋在內容之上,但不覆蓋操作欄。當隱藏式瀏覽選單完全開啟後,操作欄的標題需要更換為應用的名稱,而不是顯示當前視圖的名稱,並且關閉所有和當前視圖相關的操作按鈕。操作欄的“更多操作”功能表按鈕不需要關閉,以保證使用者可以隨時訪問“設定”和“協助”。下面我們就來實現隱藏式瀏覽選單的功能。

   

 Layout布局檔案代碼

<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">    <!-- The main content view -->    <FrameLayout        android:id="@+id/content_frame"        android:layout_width="match_parent"        android:layout_height="match_parent"                     />    <!-- The navigation drawer -->    <ListView android:id="@+id/left_drawer"        android:layout_width="100dp"        android:layout_height="match_parent"        android:layout_gravity="start"        android:choiceMode="singleChoice"        android:dividerHeight="1dp"       android:background="#ffffff"/></android.support.v4.widget.DrawerLayout>
注意要點:

(1)主要視圖(上述FrameLayout)必須為DrawerLayout中的第一個孩子,因為XML意味著z順序和抽屜必須的內容。  

(2)主要內容視圖必須設定為匹配父視圖的寬度和高度,因為它代表整個UI隱藏式瀏覽選單時隱藏。  

(3)抽屜視圖(上述ListView)必須指定它的水平重力與android:layout_gravity屬性。支援從右至左的語言(RTL),指定值與“開始”而不是“左”(右邊的抽屜裡出 現時,布局是RTL)。   

(4)抽屜視圖指定寬度的dp單位和父視圖的高度匹配。抽屜的寬度應不超過320 dp所以使用者總是可以看到部分的主要內容。

(5)DrawerLayout必須成為布局的根節點

MainActivity的代碼

package com.example.g07_navigationdrawer;import android.app.Activity;import android.app.Fragment;import android.app.FragmentManager;import android.os.Bundle;import android.support.v4.app.ActionBarDrawerToggle;import android.support.v4.widget.DrawerLayout;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity {private String[] mPlanetTitles; // listView的每一個item的名字private DrawerLayout mDrawerLayout;private ListView mDrawerList;private ActionBarDrawerToggle mDrawerToggle; // 用來監聽DrawerLayout事件@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mPlanetTitles = getResources().getStringArray(R.array.planets_array);mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);mDrawerList = (ListView) findViewById(R.id.left_drawer);// 為ListView添加適配器mDrawerList.setAdapter((ListAdapter) new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mPlanetTitles));// 監聽ListView的點擊事件mDrawerList.setOnItemClickListener(new DrawerItemClickListener());mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);// 監聽DrawerLayout的監聽事件mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.drawable.ic_launcher, R.string.app_name, R.string.app_name) {public void onDrawerClosed(View view) {super.onDrawerClosed(view);Toast.makeText(MainActivity.this, "抽屜關閉了", Toast.LENGTH_SHORT).show();}public void onDrawerOpened(View drawerView) {super.onDrawerOpened(drawerView);Toast.makeText(MainActivity.this, "抽屜開啟了", Toast.LENGTH_SHORT).show();}};mDrawerLayout.setDrawerListener(mDrawerToggle);}private class DrawerItemClickListener implementsListView.OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {// 根據ListView的被選中的選項切換介面布局Fragment fragment = new Fragment();FragmentManager fragmentManager = getFragmentManager();fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();mDrawerList.setItemChecked(position, true);// 給操作欄設定標題getActionBar().setTitle(mPlanetTitles[position]);mDrawerLayout.closeDrawer(mDrawerList);}}}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.