当前位置: 代码迷 >> Android >> Android学习08-Android中的基本控件(上)(6)_菜单:Menu和隐式抽屉组件:SlidingDrawer
  详细解决方案

Android学习08-Android中的基本控件(上)(6)_菜单:Menu和隐式抽屉组件:SlidingDrawer

热度:28   发布时间:2016-05-01 13:18:59.0
Android学习08-----Android中的基本控件(下)(6)_菜单:Menu和隐式抽屉组件:SlidingDrawer

?

一、菜单:Menu

1、选项菜单,通过程序生成

main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:id="@+id/txt"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="按下Menu键出现选项菜单" /></LinearLayout>
?

?

Menu01_Activity.java

package com.iflytek.demo;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;public class Menu01_Activity extends Activity {	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);	}	@Override	public boolean onCreateOptionsMenu(Menu menu) {		menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon(				android.R.drawable.ic_menu_delete);		menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(				android.R.drawable.ic_menu_save);		menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(				android.R.drawable.ic_menu_help);		menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(				android.R.drawable.ic_menu_add);		menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详情").setIcon(				android.R.drawable.ic_menu_info_details);		menu.add(Menu.NONE, Menu.FIRST + 6, 7, "发送").setIcon(				android.R.drawable.ic_menu_send);		menu.add(Menu.NONE, Menu.FIRST + 7, 3, "编辑").setIcon(				android.R.drawable.ic_menu_edit);		return true;	}	@Override	public boolean onOptionsItemSelected(MenuItem item) {		switch (item.getItemId()) { // 判断操作的菜单ID		case Menu.FIRST + 1:			Toast.makeText(this, "您选择的是“删除菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 2:			Toast.makeText(this, "您选择的是“保存菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 3:			Toast.makeText(this, "您选择的是“帮助菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 4:			Toast.makeText(this, "您选择的是“添加菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 5:			Toast.makeText(this, "您选择的是“详情菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 6:			Toast.makeText(this, "您选择的是“发送菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 7:			Toast.makeText(this, "您选择的是“编辑菜单”项", Toast.LENGTH_LONG).show();			break;		}		return false;	}	@Override	public void onOptionsMenuClosed(Menu menu) {		Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();	}	@Override	public boolean onPrepareOptionsMenu(Menu menu) {		Toast.makeText(this,				"在菜单显示(onCreateOptionsMenu()方法之前会调用此操作,可以在此操作之中完成一些预处理功能。)",				Toast.LENGTH_LONG).show();		return true;	}}
?

?

2、通过配置文件生成菜单

Menu02_Activity.java

package com.iflytek.demo;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;public class Menu02_Activity extends Activity {	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);	}	@Override	public boolean onCreateOptionsMenu(Menu menu) {		super.getMenuInflater().inflate(R.menu.mymenu, menu);		return true;	}	@Override	public boolean onOptionsItemSelected(MenuItem item) {		switch (item.getItemId()) { // 判断操作的菜单ID		case Menu.FIRST + 1:			Toast.makeText(this, "您选择的是“删除菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 2:			Toast.makeText(this, "您选择的是“保存菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 3:			Toast.makeText(this, "您选择的是“帮助菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 4:			Toast.makeText(this, "您选择的是“添加菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 5:			Toast.makeText(this, "您选择的是“详情菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 6:			Toast.makeText(this, "您选择的是“发送菜单”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 7:			Toast.makeText(this, "您选择的是“编辑菜单”项", Toast.LENGTH_LONG).show();			break;		}		return false;	}	@Override	public void onOptionsMenuClosed(Menu menu) {		Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();	}	@Override	public boolean onPrepareOptionsMenu(Menu menu) {		Toast.makeText(this,				"在菜单显示(onCreateOptionsMenu()方法之前会调用此操作,可以在此操作之中完成一些预处理功能。)",				Toast.LENGTH_LONG).show();		return true;	}}
?

?

Res/menu/ mymenu.xml

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">	<item android:id="@+id/item01" android:title="添加"		android:icon="@android:drawable/ic_menu_add" />	<item android:id="@+id/item02" android:title="保存"		android:icon="@android:drawable/ic_menu_save" />	<item android:id="@+id/item03" android:title="编辑"		android:icon="@android:drawable/ic_menu_edit" />	<item android:id="@+id/item04" android:title="详情"		android:icon="@android:drawable/ic_menu_info_details" />	<item android:id="@+id/item05" android:title="删除"		android:icon="@android:drawable/ic_menu_delete" />	<item android:id="@+id/item06" android:title="发送"		android:icon="@android:drawable/ic_menu_send" />	<item android:id="@+id/item07" android:title="帮助"		android:icon="@android:drawable/ic_menu_help" /></menu>
?

?

3、程序实现上下文菜单

Menu03_Activity.java

package com.iflytek.demo;import android.app.Activity;import android.os.Bundle;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class Menu03_Activity extends Activity {	private String data[] = new String[] { "hello", "www.iteye.com", "Android" }; // 定义ListView的显示项	private ListView listView = null;	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		this.listView = new ListView(this);		this.listView.setAdapter(new ArrayAdapter<String>(this,				android.R.layout.simple_expandable_list_item_1, this.data));		super.setContentView(this.listView);		super.registerForContextMenu(this.listView);	}	@Override	public boolean onContextItemSelected(MenuItem item) {		switch (item.getItemId()) {		case Menu.FIRST + 1:			Toast.makeText(this, "您选择的是“添加联系人”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 2:			Toast.makeText(this, "您选择的是“查看详情”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 3:			Toast.makeText(this, "您选择的是“删除信息”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 4:			Toast.makeText(this, "您选择的是“另存为”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 5:			Toast.makeText(this, "您选择的是“编辑”项", Toast.LENGTH_LONG).show();			break;		}		return false;	}	@Override	public void onContextMenuClosed(Menu menu) {		Toast.makeText(this, "上下文菜单关闭了", Toast.LENGTH_LONG).show();	}	@Override	public void onCreateContextMenu(ContextMenu menu, View v,			ContextMenuInfo menuInfo) {		super.onCreateContextMenu(menu, v, menuInfo);		menu.setHeaderTitle("信息操作");		menu.add(Menu.NONE, Menu.FIRST + 1, 1, "添加联系人");		menu.add(Menu.NONE, Menu.FIRST + 2, 2, "查看详情");		menu.add(Menu.NONE, Menu.FIRST + 3, 3, "删除信息");		menu.add(Menu.NONE, Menu.FIRST + 4, 4, "另存为");		menu.add(Menu.NONE, Menu.FIRST + 5, 5, "编辑");	}}
?

?

4、配置实现上下文菜单

Menu04_Activity.java

package com.iflytek.demo;import android.app.Activity;import android.os.Bundle;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class Menu04_Activity extends Activity {	private String data[] = new String[] { "hello", "www.iteye.com", "Android" }; // 定义ListView的显示项	private ListView listView = null;	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		this.listView = new ListView(this);		this.listView.setAdapter(new ArrayAdapter<String>(this,				android.R.layout.simple_expandable_list_item_1, this.data));		super.setContentView(this.listView);		super.registerForContextMenu(this.listView);	}	@Override	public boolean onContextItemSelected(MenuItem item) {		switch (item.getItemId()) {		case Menu.FIRST + 1:			Toast.makeText(this, "您选择的是“添加联系人”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 2:			Toast.makeText(this, "您选择的是“查看详情”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 3:			Toast.makeText(this, "您选择的是“删除信息”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 4:			Toast.makeText(this, "您选择的是“另存为”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 5:			Toast.makeText(this, "您选择的是“编辑”项", Toast.LENGTH_LONG).show();			break;		}		return false;	}	@Override	public void onContextMenuClosed(Menu menu) {		Toast.makeText(this, "上下文菜单关闭了", Toast.LENGTH_LONG).show();	}	@Override	public void onCreateContextMenu(ContextMenu menu, View v,			ContextMenuInfo menuInfo) {		super.onCreateContextMenu(menu, v, menuInfo);		menu.setHeaderTitle("信息操作");		super.getMenuInflater().inflate(R.menu.mymenu, menu);	}}

?

Res/ menu/ mymenu

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">	<item android:id="@+id/item01" android:title="添加联系人" />	<item android:id="@+id/item02" android:title="查看详情" />	<item android:id="@+id/item03" android:title="删除信息" />	<item android:id="@+id/item04" android:title="另存为" />	<item android:id="@+id/item05" android:title="编辑" /></menu>

?

5、子菜单基本实现

Menu05_Activity.java

package com.iflytek.demo;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.SubMenu;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class Menu05_Activity extends Activity {	private String data[] = new String[] { "hello", "www.iteye.com", "Android" }; // 定义ListView的显示项	private ListView listView = null;	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		this.listView = new ListView(this);		this.listView.setAdapter(new ArrayAdapter<String>(this,				android.R.layout.simple_expandable_list_item_1, this.data));		super.setContentView(this.listView);		super.registerForContextMenu(this.listView);	}	@Override	public boolean onCreateOptionsMenu(Menu menu) {		SubMenu fileMenu = menu.addSubMenu("文件");		SubMenu editMenu = menu.addSubMenu("编辑");		fileMenu.add(Menu.NONE, Menu.FIRST + 1, 1, "新建");		fileMenu.add(Menu.NONE, Menu.FIRST + 2, 2, "打开");		fileMenu.add(Menu.NONE, Menu.FIRST + 3, 3, "保存");		editMenu.add(Menu.NONE, Menu.FIRST + 4, 4, "撤消");		editMenu.add(Menu.NONE, Menu.FIRST + 5, 5, "恢复");		return true;	}	@Override	public boolean onOptionsItemSelected(MenuItem item) {		switch (item.getItemId()) { // 判断操作的菜单ID		case Menu.FIRST + 1:			Toast.makeText(this, "您选择的是“添加联系人”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 2:			Toast.makeText(this, "您选择的是“查看详情”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 3:			Toast.makeText(this, "您选择的是“删除信息”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 4:			Toast.makeText(this, "您选择的是“另存为”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 5:			Toast.makeText(this, "您选择的是“编辑”项", Toast.LENGTH_LONG).show();			break;		}		return false;	}}

?

6、通过配置实现子菜单

Res/menu/ editmenu.xml

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">	<item android:id="@+id/item04" android:title="撤消" />	<item android:id="@+id/item05" android:title="恢复" /></menu>

?

filemenu.xml

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">	<item android:id="@+id/item01" android:title="新建" />	<item android:id="@+id/item02" android:title="打开" />	<item android:id="@+id/item03" android:title="保存" /></menu>

?

Menu06_Activity.java

package com.iflytek.demo;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.SubMenu;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class Menu06_Activity extends Activity {	private String data[] = new String[] { "hello", "www.iteye.com", "Android" }; // 定义ListView的显示项	private ListView listView = null;	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		this.listView = new ListView(this);		this.listView.setAdapter(new ArrayAdapter<String>(this,				android.R.layout.simple_expandable_list_item_1, this.data));		super.setContentView(this.listView);		super.registerForContextMenu(this.listView);	}	@Override	public boolean onCreateOptionsMenu(Menu menu) {		SubMenu fileMenu = menu.addSubMenu("文件");		SubMenu editMenu = menu.addSubMenu("编辑");		super.getMenuInflater().inflate(R.menu.filemenu, fileMenu);		super.getMenuInflater().inflate(R.menu.editmenu, editMenu);		return true;	}	@Override	public boolean onOptionsItemSelected(MenuItem item) {		switch (item.getItemId()) { // 判断操作的菜单ID		case Menu.FIRST + 1:			Toast.makeText(this, "您选择的是“添加联系人”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 2:			Toast.makeText(this, "您选择的是“查看详情”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 3:			Toast.makeText(this, "您选择的是“删除信息”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 4:			Toast.makeText(this, "您选择的是“另存为”项", Toast.LENGTH_LONG).show();			break;		case Menu.FIRST + 5:			Toast.makeText(this, "您选择的是“编辑”项", Toast.LENGTH_LONG).show();			break;		}		return false;	}}

?

二、隐式抽屉组件:SlidingDrawer

SlidingDrawerActivity.java

package com.iflytek.demo;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.SlidingDrawer;import android.widget.SlidingDrawer.OnDrawerCloseListener;import android.widget.SlidingDrawer.OnDrawerOpenListener;import android.widget.SlidingDrawer.OnDrawerScrollListener;import android.widget.Toast;public class SlidingDrawerActivity extends Activity {	private String data[] = new String[] { "hello", "www.iteye.com", "Android" }; // 定义ListView的显示项	private ListView listView = null;	private SlidingDrawer slidingDrawer = null;	private ImageView handle = null;	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		LinearLayout layout = (LinearLayout) super.findViewById(R.id.content); // 向里面保存ListView		this.listView = new ListView(this);		this.listView.setAdapter(new ArrayAdapter<String>(this,				android.R.layout.simple_expandable_list_item_1, this.data));		layout.addView(this.listView);		this.slidingDrawer = (SlidingDrawer) super				.findViewById(R.id.slidingdrawer);		this.handle = (ImageView) super.findViewById(R.id.handle);		this.slidingDrawer				.setOnDrawerOpenListener(new OnDrawerOpenListenerImpl());		this.slidingDrawer				.setOnDrawerCloseListener(new OnDrawerCloseListenerImpl());		this.slidingDrawer				.setOnDrawerScrollListener(new OnDrawerScrollListenerImpl());	}	private class OnDrawerOpenListenerImpl implements OnDrawerOpenListener {		@Override		public void onDrawerOpened() {			SlidingDrawerActivity.this.handle					.setImageResource(R.drawable.ico_right);		}	}	private class OnDrawerCloseListenerImpl implements OnDrawerCloseListener {		@Override		public void onDrawerClosed() {			SlidingDrawerActivity.this.handle					.setImageResource(R.drawable.ico_left);		}	}	private class OnDrawerScrollListenerImpl implements OnDrawerScrollListener {		@Override		public void onScrollEnded() {			Toast.makeText(SlidingDrawerActivity.this, "窗口拖动结束。",					Toast.LENGTH_SHORT).show();		}		@Override		public void onScrollStarted() {			Toast.makeText(SlidingDrawerActivity.this, "正在拖动窗口。",					Toast.LENGTH_SHORT).show();		}	}}

?

main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <SlidingDrawer        android:id="@+id/slidingdrawer"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:content="@+id/content"        android:handle="@+id/handle"        android:orientation="horizontal" >        <ImageView            android:id="@+id/handle"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/ico_left" />        <LinearLayout            xmlns:android="http://schemas.android.com/apk/res/android"            android:id="@+id/content"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:orientation="vertical" >        </LinearLayout>    </SlidingDrawer></LinearLayout>
?

?

  相关解决方案