Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android抽屜菜單DrawerLayout的實現案例

Android抽屜菜單DrawerLayout的實現案例

編輯:關於Android編程

(1)項目布局文件
activity_main.xml


 

fragment_content.xml




    

(2)主要類文件

package com.xuliugen.drawerlayout;

import java.util.ArrayList;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity implements OnItemClickListener {

    private DrawerLayout mDrawerLayout; // 設置的是左側的抽屜菜單
    private ListView mDrawerList;
    private ArrayList menuLists;
    private ArrayAdapter adapter;
    private ActionBarDrawerToggle mDrawerToggle;// actionBar打開關閉的
    private String mTitle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTitle = (String) getTitle();

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);
        menuLists = new ArrayList();
        for (int i = 0; i < 5; i++) {
            menuLists.add(item + i);
        }
        // 初始化適配器
        adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, menuLists);
        // 為左側的抽屜設置了數據
        mDrawerList.setAdapter(adapter);

        // 左側滑動菜單的監聽事件
        mDrawerList.setOnItemClickListener(this);

        // 設置抽屜被打開關閉的對象
        mDrawerToggle = new ActionBarDrawerToggle(this, //
                mDrawerLayout,//
                R.drawable.ic_drawer,//
                R.string.drawer_open,//
                R.string.drawer_close) {
            // 被打開的時候
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActionBar().setTitle(請選擇); // 設置actionBar的文字
                invalidateOptionsMenu(); // Call onPrepareOptionsMenu()
            }

            // 被關閉的時候
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu();// 重新繪制actionBar上邊的菜單項
            }
        };

        // 設置滑動菜單的 打開關閉事件
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        // 開啟ActionBar上APP ICON的功能:點擊打開和點擊關閉7
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);

    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        boolean isDrawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_websearch).setVisible(!isDrawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

    /**
     * 菜單項的設置
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    /**
     * 設置actionBar上邊圖標的點擊事件
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // 將ActionBar上的圖標與Drawer結合起來
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        switch (item.getItemId()) {
        case R.id.action_websearch:
            Intent intent = new Intent();
            intent.setAction(android.intent.action.VIEW);
            Uri uri = Uri.parse(http://blog.csdn.net/xlgen157387);
            intent.setData(uri);
            startActivity(intent);
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * 根據官方文檔提示的信息
     * 
     * 將mDrawerToggle.syncState();放入到onPostCreate中
     */
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // 需要將ActionDrawerToggle與DrawerLayout的狀態同步
        // 將ActionBarDrawerToggle中的drawer圖標,設置為ActionBar中的Home-Button的Icon
        mDrawerToggle.syncState();
    }

    /**
     * 當屏幕發生選裝的時候也需要進行相應的設置
     */
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    /**
     * 監聽事件的實現
     * 
     * 
     * 當點擊菜單欄中的item的時候切換相應的fragment界面
     */
    @Override
    public void onItemClick(AdapterView arg0, View arg1, int position,
            long arg3) {
        // 動態插入一個Fragment到FrameLayout當中
        Fragment contentFragment = new ContentFragment();
        Bundle bundle = new Bundle();
        bundle.putString(text, menuLists.get(position));
        contentFragment.setArguments(bundle);

        // fragment創建好了之後需要交給fragmentManager來替換到相應的視圖中
        FragmentManager fm = getFragmentManager();
        fm.beginTransaction().replace(R.id.content_frame, contentFragment)
                .commit();

        mDrawerLayout.closeDrawer(mDrawerList);
    }

}

ContentFragment.java

package com.xuliugen.drawerlayout;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * 用於填充界面的fragment
 * 
 * @author xuliugen
 * 
 */
public class ContentFragment extends Fragment {

    private TextView textView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_content, container,false);
        textView = (TextView) view.findViewById(R.id.textView);

        // 獲得傳入的參數
        String text = getArguments().getString(text); 
        textView.setText(text);

        return view;
    }

}

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved