Android学习08-Android中的基本控件(上)(6)_菜单:Menu和隐式抽屉组件:SlidingDrawer
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>