`

DrawLayout几个注意点

 
阅读更多
package com.example.navigationdrawer5;

import java.util.Locale;

import android.app.Activity;
import android.app.Fragment;
import android.app.SearchManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

public class DrawerActivity extends Activity {
	private DrawerLayout drawerLayout;
	private ActionBarDrawerToggle drawerToggle;
	private ListView drawerList;
	private String[] planetTitles;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_drawer);
		planetTitles = getResources().getStringArray(R.array.planets_array);
		drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
		drawerList = (ListView) findViewById(R.id.drawerList);
		drawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, planetTitles));
		drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				selectItem(position);
			}
		});
		getActionBar().setDisplayHomeAsUpEnabled(true);
		getActionBar().setHomeButtonEnabled(true);
		drawerToggle = new ActionBarDrawerToggle(
				this, 
				drawerLayout, 
				R.drawable.ic_drawer, 
				R.string.drawer_open, 
				R.string.drawer_close) {
			@Override
			public void onDrawerClosed(View drawerView) {
				int position = drawerList.getCheckedItemPosition();
				getActionBar().setTitle(planetTitles[position]);
				invalidateOptionsMenu();
				super.onDrawerClosed(drawerView);
			}
			
			@Override
			public void onDrawerOpened(View drawerView) {
				getActionBar().setTitle(R.string.app_name);
				invalidateOptionsMenu();
				super.onDrawerOpened(drawerView);
			}
		};
		drawerLayout.setDrawerListener(drawerToggle);
		if (savedInstanceState == null) {
			selectItem(0);
		}
	}

	private void selectItem(int position) {
		Fragment fragment = new DrawerFragment();
		Bundle args = new Bundle();
		args.putInt(DrawerFragment.ARG_PLANET_ID, position);
		fragment.setArguments(args);
		getFragmentManager().beginTransaction().replace(R.id.contentFrame, fragment).commit();
		drawerList.setItemChecked(position, true);
		drawerLayout.closeDrawer(drawerList);
		getActionBar().setTitle(planetTitles[position]);
	}
	
	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);
		//5、必须在此处同步状态
		drawerToggle.syncState();
	}
	
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		drawerToggle.onConfigurationChanged(newConfig);
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		boolean isDrawerOpen = drawerLayout.isDrawerOpen(drawerList);
		menu.findItem(R.id.action_search).setVisible(!isDrawerOpen);
		return super.onPrepareOptionsMenu(menu);
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.drawer, menu);
		return true;
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		//6.需要在此处调用触发器处理下action bar上的item选择事件
		if (drawerToggle.onOptionsItemSelected(item)) {
			return true;
		}
		switch (item.getItemId()) {
		case R.id.action_search:
			Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
			intent.putExtra(SearchManager.QUERY, getActionBar().getTitle());
			if (intent.resolveActivity(getPackageManager()) != null) {
				startActivity(intent);
			} else {
				Toast.makeText(this, "没找到浏览器", Toast.LENGTH_LONG).show();
			}
			break;
		}
		return super.onOptionsItemSelected(item);
	}
	
	public static class DrawerFragment extends Fragment {
		private static final String ARG_PLANET_ID = "planet_id";
		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			ImageView view = (ImageView) inflater.inflate(R.layout.drawer_content, container, false);
			Resources res = getActivity().getResources();
			int planetId = getArguments().getInt(ARG_PLANET_ID);
			int imageid = res.getIdentifier(res.getStringArray(R.array.planets_array)[planetId].toLowerCase(Locale.getDefault()), "drawable", getActivity().getPackageName());
			view.setImageResource(imageid);
			return view;
		}
	}

}


<!-- 1、使用android.support.v4.widget.DrawerLayout布局 -->
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/contentFrame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    
    <!-- 2、左侧滑出的list,宽度需要固定下,不要满屏 -->
    <!-- 3、 android:layout_gravity="start"-->
    <!-- 4、 android:choiceMode="singleChoice"-->
    <ListView 
        android:id="@+id/drawerList"
        android:layout_width="180dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111"
        android:choiceMode="singleChoice"/>

</android.support.v4.widget.DrawerLayout>
分享到:
评论

相关推荐

    DrawLayout侧边栏效果

    本篇文章将深入探讨如何利用DrawLayout来创建一个具有侧边栏效果的应用。 首先,DrawLayout是一种自定义布局,它可以让你在界面上添加可拖动的视图,比如一个从屏幕侧边滑出的菜单。在Android中,实现这种效果通常...

    Drawlayout实现带动画的ToolBar

    本篇文章将深入探讨如何利用DrawLayout结合ToolBar来实现一个带有动画效果的菜单。 首先,我们需要理解ToolBar的基本用法。ToolBar是一个可以自定义的视图,它允许开发者添加图标、标题、子菜单等元素。通常,我们...

    drawlayout

    `DrawLayout`允许你定义两个子视图:一个是主要内容视图,另一个是从屏幕边缘滑出的抽屉视图。通过监听触摸事件,开发者可以控制抽屉的开闭,并可以调整抽屉的滑动动画和行为。 在本项目中,"修改默认图标"是指对`...

    布局为drawlayout的沉侵式效果

    在Android中,实现沉侵式效果通常涉及以下几个关键步骤: 1. **状态栏透明**:首先,需要设置Activity的主题,使其允许状态栏透明。这可以通过在`AndroidManifest.xml`中对应的Activity标签内添加`android:theme="@...

    android Drawlayout 左右侧滑动菜单

    在Android开发中,Drawlayout(通常指的是`SlidingDrawer`或者自定义实现的侧滑菜单)是一种常见的设计模式,用于创建具有左侧或右侧滑...通过熟练掌握这些知识点,开发者可以构建出功能强大且用户体验良好的侧滑菜单。

    Android_DrawLayout框架

    本文将深入探讨“Android_DrawLayout框架”,它是一个用于自定义绘制布局的工具,帮助开发者实现更加灵活和丰富的UI设计。标签“tzg”可能表示这是由开发者TZG创建或贡献的开源项目。 在Android系统中,每个View都...

    DrawLayout简单使用实例.rar

    需要注意的是,由于代码量大且可能包含多种实现方式,每个示例都有其特定的场景和目的。因此,在实际应用中,开发者应根据具体需求选择合适的实现方式,可能需要对示例代码进行适当的修改和优化。 总的来说,...

    drawlayout:Android 5.0风格的Drawlayout,statusBar颜色可设置

    Drawlayout就是针对这种设计风格而创建的一个自定义布局,允许开发者自定义状态栏的颜色,从而提供更加个性化的用户体验。 `Drawlayout` 是一个专门为Android 5.0及以上版本设计的视图组件,它的主要功能是在状态栏...

    Fragment的嵌套和侧滑菜单DrawLayout加标签页的使用demo

    这个“Fragment的嵌套和侧滑菜单DrawLayout加标签页的使用demo”是一个Android Studio项目,旨在展示如何高效地组合这些组件来创建一个功能丰富的应用界面。 首先,我们来详细讨论Fragment的嵌套。Fragment可以被...

    Fragment里面点击button跳转及DrawLayout Framelayout冲突

    在Android开发中,Fragment是应用界面的一个模块化组件,它可以在Activity中被添加、移除或替换,使得界面设计更加灵活。Button则是用户交互的基本元素,通常用于触发某个操作。当我们需要在Fragment中的Button被...

    Android DrawLayout结合ListView用法实例

    想做一个APP,设计中有侧边栏这个功能,所以现在开始学习下侧边栏的实现。 在官方的UI空间中已经给出了DrawerLayout这个侧滑的菜单空间。 因为在使用DrawerLayout的时候遇到了些问题,花了一天是时间才搞定,这里来...

    Android代码-适用于Android的自定义导航抽屉库

    It has smooth zoom-in, zoom-out animation when switched from one fragment to another. Still in Active Development. Version Installation Gradle Add it in your root build.gradle at the end of ...

    一个简单的toolabar结合drawlayout使用方法

    本文实例为大家分享了toolabar结合drawlayout使用方法,供大家参考,具体内容如下 package alice.bw.com.day03toolabardrawlayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; ...

    干货集中营app Android实现,基于RxFlux架构使用了RxJava、Retrofit、Glide、Koin等.zip

    数据来源于干货集中营描述每天提供一张精选的妹纸图片、一张精选的休息视频、若干精选的Android、ios、web等方面的技术干货截图 下载最新版本是v1.2应用设计用户界面App基本包含下面几个页面主页显示今日的一些干货...

    使用DrawerLayout实现双向侧滑菜单

    在Android应用开发中,DrawerLayout是一个非常重要的组件,它允许我们实现从屏幕边缘滑出的导航菜单,这种设计模式在许多应用中都很常见,比如Google的Material Design规范中就推荐使用。本文将深入探讨如何使用...

    Gank:干货集中营app安卓实现,基于RxFlux架构使用了RxJava,Retrofit,Glide,Koin等

    每天提供一张精选的妹纸图片,一个精选的休息视频,几个精选的Android,ios,web等方面的技术干货 屏幕截图 下载 最近版本是 应用设计 用户界面 App基本包含以下几个页面: 主页显示今日的一些干货内容,纳入与干货...

    简易框架模板demo

    最后,"drawlayout"可能指的是DrawerLayout,这是Android中的一个布局组件,常用来实现侧滑菜单效果。DrawerLayout允许在主界面的一侧滑出一个菜单,通常用于放置导航选项或其他辅助功能。在本项目中,它为用户提供...

Global site tag (gtag.js) - Google Analytics