Android教程(Menu,ActionBar,ListView)-l.docx_第1页
Android教程(Menu,ActionBar,ListView)-l.docx_第2页
Android教程(Menu,ActionBar,ListView)-l.docx_第3页
Android教程(Menu,ActionBar,ListView)-l.docx_第4页
Android教程(Menu,ActionBar,ListView)-l.docx_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 Menu1.1 Menu 的种类1. OptionMenu(选项菜单)Android手机上有个Menu按键,当Menu按下时,每个Activity 都可以选择处理这一请求,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如里多于6项,从第六项开始会被隐藏,在第六项会出瑞一个More里,点击More才出现第六项以及以后的菜单项,这些菜单也被称作Expanded Menus. 以上陈述的是在3.0版之前选项菜单的显示形式, 3.0版后由于加入了新的属性ActionBar,添加选项菜单后被显示在ActionBar中,手机上物理按键也渐渐的被去掉。选项菜单还可设置显示在屏幕下方。2. ContextMenu(上下文菜单)Android的上下文菜单,当一个视图注册到一个上下文菜单时,执行一个在该对象上的“长按”动作,将出现一个提供相关功能的浮动菜单。上下文菜单可被注册到任何视图中。但不支持图标或快捷键。当用户长按下某个VIEW的时候,显示比如EDITTEXT3. SubMenu(子菜单)SubMenu(子菜单)是在选项菜单的基础上增加子菜单.一个Menu对象可以拥有0或多个SubMenu通过调用Menu.addSubMenu方法将SubMenu添加到当前Menu中。在SubMenu 添加MenuItem的方式和在Menu中添加MenuItem方式一样,因为SubMenu是Menu的子类,但是SubMenu里不能再添加 SubMenu。1.2 Menu的实例解析1.2.1 OptionMenu(选项菜单)1.创件一个OptionMenu的工程 ,主Activity为OptionMenuActivity:public class OptionMenuActivity extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /点击Menu时,系统调用当前Activity的onCreateOptionsMenu方法,并传一个实现了一个Menu接口的Menu对象Overridepublic boolean onCreateOptionsMenu(Menu menu) / TODO Auto-generated method stub/* * add()方法的四个参数,依次是: * 1.组别,如果不分组的话就写Menu.NONE * 2.Id,Android根据这个ID来索引,相当于控件的物理ID * 3.顺序,那个菜单现在在前面由这个参数的大小决定 * 4.文本,菜单的显示文本 */menu.add(Menu.NONE,1,5,删除).setIcon(android.R.drawable.ic_menu_delete);menu.add(Menu.NONE,2,2,保存).setIcon(android.R.drawable.ic_menu_save);menu.add(Menu.NONE,3,6,帮助).setIcon(android.R.drawable.ic_menu_help);menu.add(Menu.NONE,4,1,添加).setIcon(android.R.drawable.ic_menu_add);menu.add(Menu.NONE,5,4,详细).setIcon(android.R.drawable.ic_menu_info_details);menu.add(Menu.NONE,6,3,发送).setIcon(android.R.drawable.ic_menu_send);/return true才会起作用return true; /菜单项被选择事件Overridepublic boolean onOptionsItemSelected(MenuItem item) / TODO Auto-generated method stubswitch(item.getItemId()case 1:Toast.makeText(this, 删除菜单被点击了, Toast.LENGTH_LONG).show();break;case 2:Toast.makeText(this, 保存菜单被点击了, Toast.LENGTH_LONG).show();break;case 3:Toast.makeText(this, 帮助菜单被点击了, Toast.LENGTH_LONG).show();break;case 4:Toast.makeText(this, 添加菜单被点击了, Toast.LENGTH_LONG).show();break;case 5:Toast.makeText(this, 详细菜单被点击了, Toast.LENGTH_LONG).show();break;case 6:Toast.makeText(this, 发送菜单被点击了, Toast.LENGTH_LONG).show();break;return true;/选项菜单被关闭事件,菜单被关闭有三种情况:MENU键再次被点击;BACK键被点击;用户选择了某一个菜单项Overridepublic void onOptionsMenuClosed(Menu menu) / TODO Auto-generated method stubsuper.onOptionsMenuClosed(menu);Toast.makeText(this, 选项菜单关闭了, Toast.LENGTH_LONG).show();/菜单被显示之前的事件Overridepublic boolean onPrepareOptionsMenu(Menu menu) / TODO Auto-generated method stubToast.makeText(this, 选项菜单显示之前onPrepareOptionsMenu方法会被调用, Toast.LENGTH_LONG).show();return true;Andriod3.0以前的显示效果: Andriod3.0以后的显示效果: 1.2.2 ContextMenu(上下文菜单) 1创建一个ContextMenu工程 ,主Activity实现如下:public class ContextMenuActivity extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /为VIEW注册上下文菜单 findViewById(R.id.button1).setOnCreateContextMenuListener(this); /上下文菜单被选择事件Overridepublic boolean onContextItemSelected(MenuItem item) / TODO Auto-generated method stub switch(item.getItemId() case 1: Toast.makeText(this, 编辑, Toast.LENGTH_LONG).show();break; case 2: Toast.makeText(this, 删除, Toast.LENGTH_LONG).show();break; return super.onContextItemSelected(item); /点击注册的VIEW时,系统调用当前Activity的onCreateContextMenu方法,并传一个实现了一个Menu接口的Menu对象Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) / TODO Auto-generated method stubsuper.onCreateContextMenu(menu, v, menuInfo);menu.add(0,1,0,Edit);menu.add(0,2,0,Delete);上下文菜单经常会与LISTVIEW结合使用实现效果:1.2.3 SubMenu(子菜单)Android提供了基于Group id管理多个MenuItem的方法。removeGroup(int group);移除所有属于Group的MenuItem.setGroupEnable( int group ,boolean enable):批量开启或关闭整个组的MenuItem。 setGroupVisible( int group ,visible):批量显示或隐藏整个组的MenuItem。 setGroupCheckable( int group ,boolean checkable,boolean exclusive):设置菜单是否可选中。最后一个exclusive是指是单选还是多选,当exclusive是true时,系统将菜单前面添加单选框,是false时则变成是checkbox多选框。创建一个工程SubMenu,主Activity实现如下public class SubMenuActivity extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /点击Menu时,系统调用当前Activity的onCreateOptionsMenu方法,并传一个实现了一个Menu接口的Menu对象Overridepublic boolean onCreateOptionsMenu(Menu menu) / TODO Auto-generated method stub/* * add()方法的四个参数,依次是: * 1.组别,如果不分组的话就写Menu.NONE * 2.Id,Android根据这个ID来索引,相当于控件的物理ID * 3.顺序,那个菜单现在在前面由这个参数的大小决定 * 4.文本,菜单的显示文本 */SubMenu subMenu = menu.addSubMenu(Menu.FIRST, 1, Menu.NONE, 显示设置); subMenu.add(Menu.FIRST, 2, Menu.FIRST+2, 网络设置); subMenu.add(Menu.FIRST, 3, Menu.FIRST+3, 高级设置); subMenu.add(Menu.FIRST, 4, Menu.FIRST+4, 安全设置);/return true才会起作用return true; /菜单项被选择事件Overridepublic boolean onOptionsItemSelected(MenuItem item) / TODO Auto-generated method stubswitch(item.getItemId()case 1:Toast.makeText(this, 显示设置被点击, Toast.LENGTH_LONG).show();break;case 2:Toast.makeText(this, 子菜单网络设置菜单被点击了, Toast.LENGTH_LONG).show();break;case 3:Toast.makeText(this, 子菜单高级设置菜单被点击了, Toast.LENGTH_LONG).show();break;case 4:Toast.makeText(this, 子菜单安全设置菜单被点击了, Toast.LENGTH_LONG).show();break;return true;/选项菜单被关闭事件,菜单被关闭有三种情况:MENU键再次被点击;BACK键被点击;用户选择了某一个菜单项Overridepublic void onOptionsMenuClosed(Menu menu) / TODO Auto-generated method stubsuper.onOptionsMenuClosed(menu);Toast.makeText(this, 选项菜单关闭了, Toast.LENGTH_LONG).show();/菜单被显示之前的事件Overridepublic boolean onPrepareOptionsMenu(Menu menu) / TODO Auto-generated method stubToast.makeText(this, 选项菜单显示之前onPrepareOptionsMenu方法会被调用, Toast.LENGTH_LONG).show();return true;实现图如下: 2 Action Bar2.1 Action Bar 简介 ActionBar(活动栏)是Android3.0以上才有的新性,其替代了显示在屏幕顶端的标题栏。主要负责显示菜单,Wigdet,导航等功能,主要包括: 显示选项菜单中的菜单项到活动样; 添加可交互的视图到活动栏作为活动视图; 提供标签导航,方便不同的Fragment之间的切换; 提供下拉导航功能。活动栏的三种显示模式: NAVIGATION_MODE_STANDARD NAVIGATION_MODE_LIST NAVIGATION_MODE_TABS2.2 Action Bar具体实现由于ActionBar是Android3.0版之后的功能,调用时SDK版本不可低于Android3.0 AndroidManifest.xml文件中minSdkVersion大于等于11:2.2.1 ActionBar的显示、隐藏调用Actionbar显示可用代码实现,或直接在AndroidManifest.xml中配置属性。代码实现:ActionBar actionbar = getActionBar();调用时要在setContentView(R.layout.*)之后;actionBar.show();/显示活动栏/ actionBar.hide();/隐藏活动栏或是配置文件中: 2.2.2 ActionBar的构成1. Main action bar(用于放置程序图标,标题或MENUITEM,也可加入自定义LAYOUT)2. Top bar(提供标签导航)3. Bottom bar(底部栏用于放置MENUITEM)屏幕切换成横屏后,1 2 3 部分全部显示在上方,集结成一条活动栏;通常情况下菜单项是显示在1的右边,优先向右填充;如果要使菜单项显在底部栏的话,配置文件中需要设置: android:uiOptions=splitActionBarWhenNarrow1部分可以不显示程序图标及标题,可以加入自定义的LAYOUT以上三部分的ActionBar可以根据需要调用2.2.3 ActionBar的三种显示模式通过Actionbar.setNavigationMode()来设置显示的模式;1. Actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);此为标签导航显示,在设置为此模式之前,要先加入所需要的菜单项目actionbar.addTab(actionbar.newTab().setText(Tab ONE).setTabListener(this);类需要实现接口(implements TabListener)2. Actionbar.setNavigationMode(ActionBar. NAVIGATION_MODE_LIST);活动栏设置为下拉导航后,还需做以下工作 a.创建数据,即菜单信息(可创建在String.xml) list2-1 list2-2 b.设置下拉菜单 Actionbar.setNavigationMode(ActionBar. NAVIGATION_MODE_LIST);c.实现 Actionbar. OnNavigationListener接口 SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this,R.array. list_menu, android.R.layout.simple_spinner_dropdown_item); actionbar.setListNavigationCallbacks(mSpinnerAdapter, new DropDownListenser();public class DropDownListenser implements OnNavigationListener Overridepublic boolean onNavigationItemSelected(int itemPosition, long itemId) / TODO Auto-generated method stub /实现选择下拉菜单动作return true;3. Actionbar.setNavigationMode(ActionBar. NAVIGATION_MODE_STANDARD);设置标准模式。当设为标准模式时, Actionbar只显示MainActionBar.调用setDisplayOptions()可根据用户需求显示主活动栏上的元素(程序图标,标准等)2.3 ActionBar实例解析 2.3.1 ActionBar标签导航1. 建一个工程叫Sample,主Activity叫SampleActivity.java:2. SampleActivity.java:public class SampleActivity extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /获取活动栏 final ActionBar actionbar; actionbar = getActionBar(); /不显示主菜单栏 /隐藏主活动栏actionbar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_TITLE); /添加标签并设置监听 actionbar.addTab(actionbar.newTab().setText(Tab One).setTabListener(new TabListener(new TabContentFragment(Tab one); actionbar.addTab(actionbar.newTab().setText(Tab Two).setTabListener(new TabListener(new TabContentFragment(Tab two); actionbar.addTab(actionbar.newTab().setText(Tab Three).setTabListener(new TabListener(new TabContentFragment(Tab three); actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); /重写接口private class TabListener implements ActionBar.TabListener private TabContentFragment mFragment; public TabListener(TabContentFragment fragment) mFragment = fragment; public void onTabSelected(Tab tab, FragmentTransaction ft) / fragment_content是定义在MAIN.XML里面的一个控件 ft.add(R.id.fragment_content, mFragment, mFragment.getText(); public void onTabUnselected(Tab tab, FragmentTransaction ft) ft.remove(mFragment); public void onTabReselected(Tab tab, FragmentTransaction ft) Toast.makeText(SampleActivity.this, Reselected!, Toast.LENGTH_SHORT).show(); private class TabContentFragment extends Fragment private String mText; public TabContentFragment(String text) mText = text; public String getText() return mText; Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) /创建一个LAYOUT frame_content.xml显示内容 View fragView = inflater.inflate(R.layout.frame_content, container, false); TextView text = (TextView) fragView.findViewById(R.id.text); text.setText(mText); return fragView; Frame_content.xml: 注意点:1. 点击TAB后替换显示的区域要创建FRAMLAYOUT类型的对象(如上例main.xml中的fragment_content)2. 在FRAMLAYOUT里面显示的另一个LAYOUT(frame_content.xml)如果根据不同的标签显示不同内容时,可以在onCreateView中根据不同的条件返回不同的VIEW2.3.2 ActionBar下拉菜单主体实现如下SampleActivity.java:public class SampleActivity extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); final ActionBar actionbar; actionbar = getActionBar(); /设置下拉菜单和监听器 SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this,R.array.app_name, android.R.layout.simple_spinner_dropdown_item); actionbar.setListNavigationCallbacks(mSpinnerAdapter, new DropDownListenser(); /实现下拉菜单点击事件接口 public class DropDownListenser implements OnNavigationListener /创建存放菜单项的数组 String listNames=getResources().getStringArray(R.array.app_name); /当选择下拉菜单项的时候,将ACTIVITY中的内容置换为对应的FRAGMENT Override public boolean onNavigationItemSelected(int itemPosition, long itemId) / TODO Auto-generated method stub FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction();/将ACTIVITY中的内容替换成对应选择的FRAGMENT transaction.replace(R.id.fragment_content, new TabContentFragment(listNamesitemPosition); mit(); return true; /创建新的FRAGMENT private class TabContentFragment extends Fragment private String mText; public TabContentFragment(String text) mText = text; public String getText() return mText; /创建一个LAYOUT frame_content.xml显示内容 Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) View fragView = inflater.inflate(R.layout.frame_content, container, false); TextView text = (TextView) fragView.findViewById(R.id.text); text.setText(mText); return fragView; String.xml: list2-1 list2-2 注意点:1. 下拉菜单中,菜单项是存放在数组中,再读取显示2. ArrayAdapter.createFromResource(this,R.array.app_name, android.R.layout.simple_spinner_dropdown_item);App_name是自己创建的数组名称2.3.3 ActionBar自定义菜单主体实现如下:public class SampleActivity extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); final ActionBar actionbar; actionbar = getActionBar(); /读取自定义的LAYOUT View mCustomView = getLayoutInflater().inflate(R.layout.customzie_bar, null); /将自定义的LAYOUT放入ACTIONBAR中actionbar.setCustomView(mCustomView, new ActionBar.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);/int flags = ActionBar.DISPLAY_SHOW_CUSTOM;int change = actionbar.getDisplayOptions() flags;actionbar.setDisplayOptions(change, flags); /不显示主菜单栏 actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); Overridepublic boolean onCreateOptionsMenu(Menu menu) / TODO Auto-generated method stub menu.add(Menu.NONE,1,Menu.NONE,MENU1).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);return super.onCreateOptionsMenu(menu);3 ListView3.1 ListView简介 ListView是Android开发中比较常用的组件,其主要以列表的形式展示具体内容,并且够根据数据长度自适应显示。ListView显示需要三个要素:1. ListView用来展示的列表的View2. 适配器用来把数据映射到ListView上的中介3. 数据具体的将被映身的字符串,图片,或者基本组件。根据列表的适配器,列表分为三种:1. ArrayAdapter(最为简单,只能展示一行字)2. SimleAdapter (有最好的扩充性,可以自定义出各种效果)3. SimpleCursorAdapter(SimleAdapter对数据库的简单结合)3.2 ListView的实现3.2.1 ArrayAdapter创建工程ListView,主Activity代码如下:public class ListViewActivity extends Activity /* Called when the activity is first created. */private ListView listView; Override public void onCreate(Bundle savedInstanceState) super.on

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论