`
irtutsk
  • 浏览: 17792 次
社区版块
存档分类
最新评论

ActionBar导航(滑动抽屉)

阅读更多

ActionBar导航(滑动抽屉)

官方的DrawerLayout有严重缺陷,这里只上代码。

 

public class MainActivity extends ActionBarActivity {
	private DrawerLayout mDrawerLayout;
	private ActionBarDrawerToggle mDrawerToggle;
	private ListView mDrawerList;
	private CharSequence mTitle;

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

		mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
		mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
				GravityCompat.START);
		mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
				R.drawable.ic_drawer, 0, 0) {

			/** Called when a drawer has settled in a completely closed state. */
			public void onDrawerClosed(View view) {
				supportInvalidateOptionsMenu();
			}

			/** Called when a drawer has settled in a completely open state. */
			public void onDrawerOpened(View drawerView) {
				supportInvalidateOptionsMenu();
			}
		};
		mDrawerLayout.setDrawerListener(mDrawerToggle);
		getSupportActionBar().setDisplayHomeAsUpEnabled(true);
		initListView();
	}

	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);
		mDrawerToggle.syncState();
		onSectionAttached(0);
	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		mDrawerToggle.onConfigurationChanged(newConfig);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		if (!mDrawerLayout.isDrawerOpen(mDrawerList)) {
			getMenuInflater().inflate(R.menu.main, menu);
			restoreActionBar();
			return true;
		}
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		if (mDrawerToggle.onOptionsItemSelected(item)) {
			return true;
		}

		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	private void initListView() {
		mDrawerList = (ListView) findViewById(R.id.left_drawer);
		mDrawerList.setAdapter(new ArrayAdapter<String>(this,
				android.R.layout.simple_expandable_list_item_1, getData()));
		mDrawerList.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// 响应事件
				onSectionAttached(position);
				restoreActionBar();
			}
		});
	}

	private List<String> getData() {
		List<String> data = new ArrayList<String>();
		data.add("菜单1");
		data.add("菜单2");
		return data;
	}

	private void restoreActionBar() {
		ActionBar actionBar = getSupportActionBar();
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
		actionBar.setDisplayShowTitleEnabled(true);
		actionBar.setTitle(mTitle);
	}

	private void onSectionAttached(int position) {
		FragmentManager fragmentManager = getSupportFragmentManager();
		if (position == 0) {
			fragmentManager.beginTransaction()
					.replace(R.id.content_frame, new MyFragmentA()).commit();
			mTitle = getString(R.string.a);
		} else {
			fragmentManager.beginTransaction()
					.replace(R.id.content_frame, new MyFragmentB()).commit();
			mTitle = getString(R.string.b);
		}
	}
}
 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_layout"
    tools:context="com.example.navigation_mode_drawer.MainActivity" >

    <!-- The main content view -->
    <!-- main content must be the first element of DrawerLayout because it will be drawn first and drawer must be on top of it -->

    <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="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#ccc"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />

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

Android2.3模拟器效果图

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

相关推荐

    DrawerLayout 全屏 左右滑动 抽屉

    总之,DrawerLayout全屏左右滑动抽屉的实现涉及到多个Android UI组件和手势处理的知识,开发者需要熟练掌握布局管理、触摸事件处理、手势识别以及Activity的生命周期管理等技能。通过这样的实践,可以提高Android...

    Android-仿百度地图抽屉拖拽效果

    这种效果在许多应用中都有应用,如Google Maps、Facebook等,而百度地图也采用了类似的抽屉式导航设计。本项目"Android-仿百度地图抽屉拖拽效果"旨在实现一个类似的功能,让用户在自己的Android应用中也能添加这一...

    drawerLayout+actionbar拉动抽屉

    这个抽屉效果常见于许多应用的主界面,用户可以通过从屏幕边缘向内滑动来打开或关闭抽屉。与`DrawerLayout`一起使用的通常是`ActionBar`或`ToolBar`,它提供了抽屉的触发图标,如三道水平线(汉堡菜单)。 `...

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

    6. **ActionBarDrawerToggle**:这个工具类帮助我们将`DrawerLayout`与`ActionBar`(或`Toolbar`)上的汉堡图标关联起来,使得点击图标能打开/关闭抽屉菜单。 7. **Event Handling**:处理菜单项的点击事件,通常在...

    郭霖所写的关于ActionBar解析和实战博客中的源码

    郭霖的博客中可能详细讲解了如何在实际项目中应用这些方法,包括如何实现滑动抽屉(DrawerLayout)与ActionBar的联动,以及如何处理ActionBar在不同设备和屏幕尺寸上的适配问题。 除了原生的ActionBar,Android ...

    ActionBar and StatusBar

    此外,使用`ActionBarDrawerToggle`可以实现ActionBar与滑动抽屉的交互效果。 接下来,我们来看看StatusBar。StatusBar位于屏幕顶部,显示系统状态信息,如时间、网络连接状态、电量、通知等。在Android 5.0...

    ActionBar+SlidingMenu+带滑动菜单和tab的模板

    `ActionBar`是Android系统提供的一个顶部导航栏,而`SlidingMenu`则是一种侧滑菜单,通常用于实现类似抽屉效果的导航。 `ActionBar`是Android SDK中的一个重要组成部分,它提供了一个统一的界面元素,可以展示应用...

    ActionBar与Drawer组合使用的例子

    `ActionBar`通常位于应用界面的顶部,显示应用的标识、标题和一些操作选项,而`Drawer`(也称为滑动侧边栏或Navigation Drawer)则从屏幕边缘滑出,为用户提供一个隐藏的导航菜单。让我们深入探讨这两个组件的使用...

    actionbar竖向导航

    当我们谈论“actionbar竖向导航”时,通常是指在Action Bar中实现一个可以滚动的列表,让用户通过垂直滑动来选择不同的功能或内容区域。 实现ACTIONBAR竖向导航的步骤如下: 1. **集成ActionBar**: 首先,确保你的...

    Android ActionBar学习源代码

    它通常包含应用的logo、标题、菜单项以及一些可操作的控件,如抽屉滑动按钮、搜索框等。在Android 4.0(API Level 14)之后,ActionBar成为了设计规范的一部分,被广泛应用于各种Android应用中。 在Android ...

    actionbar+viewpager+slidingpanelayout

    Actionbar是Android应用中显示应用程序标识、菜单和导航的区域,ViewPager则允许用户左右滑动来切换多个页面,而SlidingPaneLayout则是一个侧滑面板布局,常用于实现类似抽屉效果的界面。在这个项目中,开发者选择...

    ActionBar及相关开发源码

    这个源码项目旨在深入理解并实践ActionBar的使用,包括创建、添加搜索功能、展示不同详情页面、添加Tab标签以及实现抽屉布局和开关的操作。现在,我们将详细探讨这些知识点。 1. **ActionBar的创建**: - 在...

    Android ActionBar Demo

    ActionBar还可以与抽屉布局配合,实现滑动式侧边栏。通过设置 DrawerLayout 和 NavigationView 实现这一功能。 **7. 响应式设计** 在不同的屏幕尺寸和方向下,可能需要调整ActionBar的行为。可以使用Theme....

    ActionBar和Fragment的经典实例

    `ActionBar`不仅提供了传统的菜单选项,还支持搜索视图、切换标签、滑动抽屉等高级功能。在Android 3.0及以上版本中,`ActionBar`成为了默认的设计模式,极大地提升了应用的专业感和一致性。通过自定义`ActionBar`,...

    自定义组件实现ActionBar

    3. 导航模式:提供滑动、下拉列表或标签页等不同的导航方式。 4. 行为切换:例如,搜索栏、设置按钮等,可以方便用户快速访问常用功能。 自定义ActionBar的步骤主要包括以下几点: 1. **启用ActionBar**:在...

    ActionBar+侧滑第三方框架

    在Android应用开发中,`ActionBar`是一个非常重要的组件,它位于应用程序顶部,提供了一种标准的方式来展示应用的品牌、导航以及操作。`ActionBar`通常包含应用图标、标题、操作按钮(菜单项)等元素,帮助用户理解...

    附件里的项目自定义了ActionBar和日历控件,日历控件参照网络上的资料

    4. **动作抽屉(Action Drawer)**:可以添加滑动抽屉式导航,通常包含应用的主要功能选项。 5. **工具栏(Toolbar)**:从Android Support Library引入的Toolbar是ActionBar的一个替代品,它提供了更大的自定义空间...

    Android 抽屉效果的导航菜单

    在Android开发中,抽屉效果(也称为导航抽屉)是一种常见的设计模式,它允许用户通过从屏幕边缘向内滑动来访问应用的主菜单或导航选项,而无需离开当前界面。这种效果使得用户能够在不打断当前操作的情况下方便地...

    Android 抽屉fragment实现demo

    此外,抽屉的开关状态通常由`ActionBarDrawerToggle`处理,它会同步`DrawerLayout`的状态到ActionBar上的抽屉图标。`ActionBarDrawerToggle`不仅提供了打开和关闭抽屉的点击事件处理,还能在抽屉状态改变时自动更新...

    安卓开发-高仿网易新闻抽屉效果+横向菜单+页面滑动.zip.zip

    在“安卓开发-高仿网易新闻抽屉效果+横向菜单+页面滑动.zip”项目中,开发者可能会结合以上知识点,创建一个包含抽屉导航、横向菜单的新闻应用。抽屉中可能包含不同的分类,如热点、体育、娱乐等,用户通过滑动抽屉...

Global site tag (gtag.js) - Google Analytics