Android侧滑菜单DrawerLayout的使用

版权所有,禁止匿名转载;禁止商业使用。

QfmAJzY.gif

现在侧滑菜单使用很多,大都是通过SlidingMenu实现。现在也可以通过DrawerLayout


创建抽屉布局


frament_content.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >
  <TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="25sp" />
</LinearLayout>
activity_main.xml
<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" >
  </FrameLayout>
  <!-- The navigation view -->
  <ListView
    android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#ffffcc"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp" >
  </ListView>
</android.support.v4.widget.DrawerLayout>

然后新建一个类继承Fragment类


/**
 * ContentFragment.java
 * 版权所有(C) 2015
 * 创建者:cuiran 2015-1-3 下午3:25:44
 */
package com.cayden.drawerlayoutdemo;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
 * TODO 
 * @author cuiran
 * @version 1.0.0
 */
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;
  }
  
}

完成Activity代码


package com.cayden.drawerlayoutdemo;
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<String> menuLists;
  private ArrayAdapter<String> adapter;
  private ActionBarDrawerToggle mDrawerToggle;
  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<String>();
    for (int i = 0; i < 5; i++)
      menuLists.add("菜单0" + i);
    adapter = new ArrayAdapter<String>(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("请选择");
        invalidateOptionsMenu(); // Call onPrepareOptionsMenu()
      }
      @Override
      public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);
        getActionBar().setTitle(mTitle);
        invalidateOptionsMenu();
      }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    
    //开启ActionBar上APP ICON的功能
    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) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
  @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://www.baidu.com");
      intent.setData(uri);
      startActivity(intent);
      break;
    }
    return super.onOptionsItemSelected(item);
  }
  
  @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);
  }

  

  

  

  

  

  

  


  @Override

  public void onItemClick(AdapterView<?> arg0, View arg1, int position,

      long arg3) {

    // 动态插入一个Fragment到FrameLayout当中

    Fragment contentFragment = new ContentFragment();

    Bundle args = new Bundle();

    args.putString("text", menuLists.get(position));

    contentFragment.setArguments(args);


    FragmentManager fm = getFragmentManager();

    fm.beginTransaction().replace(R.id.content_frame, contentFragment)

        .commit();


    mDrawerLayout.closeDrawer(mDrawerList);

  }


}


0 0