一、菜单: 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>