`

android navigationdrawer抽屉菜单

阅读更多
MainActivity.java
package com.ct9_navigationdrawer;

import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.res.Configuration;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;

public class MainActivity extends Activity {
	// 抽屉菜单跟控件
	private DrawerLayout mDrawerLayout;
	// 抽屉菜单左边菜单
	private ListView mDrawerList;
	// 抽屉菜单应用图标指示抽屉开关
	private ActionBarDrawerToggle mDrawerToggle;
	private String mDrawerTitle;
	
	//抽屉左边菜单的数组集合
	private static String[] mPlanetTitle;

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

		findViews();
		setListener();
		initdata();
		
		if(savedInstanceState==null){
			selectItem(0);
		}
	}

	private void findViews() {
		// TODO Auto-generated method stub
		mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);
		mDrawerList = (ListView) findViewById(R.id.left_drawer);
		mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
				R.drawable.ic_drawer, 1,
				1){

					@Override
					public void onDrawerClosed(View drawerView) {
						// TODO Auto-generated method stub
						getActionBar().setTitle(mDrawerTitle);
						invalidateOptionsMenu();
					}

					@Override
					public void onDrawerOpened(View drawerView) {
						// TODO Auto-generated method stub
						super.onDrawerOpened(drawerView);
						invalidateOptionsMenu();
					}
		};
		
	}

	private void setListener() {
		// TODO Auto-generated method stub
		mDrawerList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				selectItem(position);
			}			
		});
		
		mDrawerLayout.setDrawerListener(mDrawerToggle);
	}
	public void selectItem(int position) {
		// TODO Auto-generated method stub
		Fragment fragment=new PlanetFragment();
		Bundle bundle=new Bundle();
		bundle.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
		fragment.setArguments(bundle);
		
		//事物提交
		FragmentTransaction manager=getFragmentManager().beginTransaction();
		manager.replace(R.id.frame_content, fragment);
		manager.commit();
		
		mDrawerList.setItemChecked(position, true);
		setTitle(mPlanetTitle[position]);
		mDrawerLayout.closeDrawer(mDrawerList);
	}
	
	private void initdata(){
		mDrawerTitle=getTitle().toString();//菜单标题
		//mPlanetTitle=new String[]{"水星","金星","地球","火星","木星","土星","天王星","海王星"};// 左边菜单数据集合
		
		// 左边菜单数据集合
		mPlanetTitle = getResources().getStringArray(R.array.planets_array);
		//设置拉出导航菜单时阴影,官方示例不明显,可把图片背景修改一下  
		mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item,mPlanetTitle));
		mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
		
		getActionBar().setDisplayHomeAsUpEnabled(true);
		getActionBar().setHomeButtonEnabled(true);
	}
	
	@Override
	public void setTitle(CharSequence title) {
		// TODO Auto-generated method stub
		mDrawerTitle=title.toString();
		getActionBar().setTitle(mDrawerTitle);
	}

	public static class PlanetFragment extends Fragment{
		public static final String ARG_PLANET_NUMBER="planet_number";

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			// TODO Auto-generated method stub
			View view=inflater.inflate(R.layout.fragment_planet, container,false);
			int i=getArguments().getInt(ARG_PLANET_NUMBER);
			String planet=mPlanetTitle[i];
			
			int imgId=getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()), "drawable", getActivity().getPackageName());
			ImageView img=(ImageView) view.findViewById(R.id.image);
			img.setImageResource(imgId);
			getActivity().setTitle(planet);
			return view;
		}
		
	}
	
	
	@Override
	public boolean onMenuOpened(int featureId, Menu menu) {
		// TODO Auto-generated method stub
		if(mDrawerLayout.isDrawerOpen(mDrawerList)){
			mDrawerLayout.closeDrawer(mDrawerList);
		}else{
			mDrawerLayout.openDrawer(mDrawerList);//当打开菜单时
		}
		return super.onMenuOpened(featureId, menu);
	}


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		//getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
}



activity_main.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawerlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/frame_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="1dp" />

</android.support.v4.widget.DrawerLayout>


fragment_planet.xml

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:gravity="center"
    android:padding="32dp" />


drawer_list_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:textColor="#fff"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"/>


strings.xml

<resources>

    <string name="app_name">com.ct9_navigationdrawer</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
    <string name="drawer_open">Open navigation drawer</string>
    <string name="drawer_close">Close navigation drawer</string>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>

</resources>


要注意的是在drawable下放几张图片如图:





  • 大小: 6.1 KB
分享到:
评论

相关推荐

    Android navigation drawer 实例

    Navigation Drawer是Android应用程序设计中的一个重要组件,它是一个滑动式菜单,通常出现在应用主界面的左侧,用于提供导航选项。这个实例适用于Android 2.1及以上版本,这意味着它具有广泛的设备兼容性,可以让...

    android navigation drawer

    Android Navigation Drawer 是 Android 应用开发中的一个关键组件,它是一种侧滑菜单设计,通常用于在主屏幕边缘滑出,提供导航选项。这种设计模式在移动应用中非常常见,因为它可以高效地展示多个层级的菜单内容,...

    Android NavigationDrawer 开发详解

    在Android应用开发中,`NavigationDrawer`是一种常见的设计模式,用于提供一个可以从屏幕侧边滑出的菜单,通常用于在不同功能之间切换。这个组件在Android Material Design规范中被广泛推荐,可以为用户提供一致的...

    NavigationDrawer 抽屉式导航

    3. `drawer_menu.xml` - 抽屉菜单的定义文件。 4. `styles.xml` - 应用的主题设置,可能包含了对`DrawerLayout`和`ActionBar`的定制。 通过对这个项目的分析和学习,开发者可以更深入地理解如何在Android应用中集成...

    Android NavigationDrawer完整代码-IT计算机-毕业设计.zip

    这份名为"Android NavigationDrawer完整代码"的资源包是一个几年前的Android应用源码示例,适用于学生进行毕业设计学习。下面将详细介绍Navigation Drawer的实现原理和关键知识点。 1. **Material Design规范**:...

    Android源码之实现NavigationDrawer的完整代码.zip

    NavigationDrawer是Android应用中常见的一种设计模式,它通常被用作侧滑菜单,允许用户在主界面和附加功能之间切换。在Android开发中,NavigationDrawer的实现涉及到许多关键概念和技术,包括布局管理、触摸事件处理...

    安卓Android源码——NavigationDrawer完整代码.rar

    这个 `NavigationDrawer` 示例源码提供了完整的实现细节,包括布局设计、事件监听、适配器和菜单项点击事件处理。通过研究这个例子,开发者可以更好地理解如何在 Android 应用中构建功能完善的导航抽屉,提升用户...

    安卓SlidingMenu各种菜单侧滑菜单相关-NavigationDrawer完整代码.rar

    1. **布局文件**:抽屉菜单的布局通常包含在XML文件中,用`DrawerLayout`作为根元素,其中`NavigationView`用于创建菜单内容,而主内容视图则放在`DrawerLayout`的其他子视图中。 2. **数据绑定**:菜单项可以通过`...

    android 左右侧滑抽屉菜单demo

    在Android应用开发中,抽屉菜单(Drawer Layout)是一种常见的设计模式,用于实现从屏幕边缘滑动出的导航菜单。这种设计通常用于大型应用程序,提供一个简洁的方式展示多个层级的导航选项。标题“android 左右侧滑...

    Android左右滑动抽屉菜单官方demo

    在Android应用开发中,抽屉菜单(Navigation Drawer)是一种常见的设计模式,用于提供侧边导航选项。它允许用户通过从屏幕边缘向内滑动来显示一个包含多个链接或功能的菜单,通常用在主界面的左侧。抽屉菜单在很多...

    Android NavigationDrawer

    在`NavigationDrawer-MaterialDesign`这个开源项目中,开发者可能已经封装了一些便利的方法和类,简化了上述步骤,使其更容易集成到自己的应用中。开发者可以通过阅读源码学习如何实现和定制Navigation Drawer,以...

    android类似facebooke抽屉式导航菜单源码

    在Android应用开发中,抽屉式导航菜单(Drawer Menu)是一种常见的设计模式,它模仿了Facebook应用程序的侧滑导航方式,使用户能够轻松地在不同的功能模块之间切换。抽屉式菜单通常隐藏在屏幕左侧,当用户向右滑动...

    NavigationDrawer完整代码

    NavigationDrawer在Android开发中是一个非常重要的组件,它通常被用作应用的主要导航界面,可以从屏幕边缘滑出,显示一系列的菜单选项或者功能模块。在Android设计指南中,它被推荐用于提供多层级的导航结构,使得...

    Navigation Drawer API7

    Navigation Drawer是Android应用设计中一个重要的组件,尤其在API级别7及以上版本中广泛使用。它提供了一种在主屏幕侧滑出菜单的方式,通常用于放置导航选项或设置,让用户能够轻松访问不同功能区域,而无需频繁地...

    Android代码-NavigationDrawer完整代码.rar

    NavigationDrawer在Android开发中是一个非常重要的组件,它通常被用作应用的主要导航界面,可以从屏幕左侧滑出,显示一系列的菜单选项。这个压缩包“Android代码-NavigationDrawer完整代码.rar”包含了一份完整的...

    navigationdrawer

    Navigation Drawer是Android应用程序设计中的一个重要组件,它是一个滑动面板,通常从屏幕的左侧滑出,用于展示应用的主要导航选项。这种设计模式被广泛应用于谷歌的Material Design规范中,为用户提供了一种高效的...

    Android应用源码之NavigationDrawer完整代码.zip

    NavigationDrawer是Android应用程序中常见的一种设计模式,它用于在界面左侧或右侧滑出一个侧滑菜单,通常包含应用的主要导航选项。在这个名为"Android应用源码之NavigationDrawer完整代码.zip"的压缩包中,你应该...

    安卓Android源码——NavigationDrawer完整代码.zip

    NavigationDrawer是Android应用程序中常见的一种设计模式,它用于实现侧滑菜单效果,通常在左侧滑出,用于展示应用的主要功能或设置选项。这个压缩包包含了实现这一功能的完整源码,对于想要深入学习Android开发或者...

    Android-NavigationView+DrawerLayout实现抽屉菜单

    接着,`NavigationView`是Google Material Design库中的一个组件,它专门用于创建抽屉菜单。在上面的布局中,我们将其作为`DrawerLayout`的子视图,并通过`app:menu`属性引用一个XML资源,该资源定义了抽屉菜单的...

    NavigationDrawerSI-Navigation Drawer的一个简单实现,滑动并以折叠方式打开菜单.zip

    Navigation Drawer的实现主要依赖于Android的`android.support.v4.widget.DrawerLayout`组件,这是一个专门为这种侧滑抽屉设计的布局容器。在这个项目中,开发者可能使用了自定义的视图或者动画来实现折叠效果,这...

Global site tag (gtag.js) - Google Analytics