- 浏览: 115167 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
liubang201010:
可看看此文:http://www.goodu.info/gc/ ...
基于Android手机开发平台的移动数字图书馆服务系统研究 -
chenhaodejia:
hbxflihua 写道你好,在加载xml的时候能不能像htm ...
android自定义Spinner下拉菜单样式并获得选项的值 -
chenhaodejia:
心灵花园2010 写道你好,问下服务端该怎么去搭建?
什么意思 ...
基于Android手机开发平台的移动数字图书馆服务系统研究 -
心灵花园2010:
你好,问下服务端该怎么去搭建?
基于Android手机开发平台的移动数字图书馆服务系统研究 -
hbxflihua:
你好,在加载xml的时候能不能像html页面的select标签 ...
android自定义Spinner下拉菜单样式并获得选项的值
覆盖onPrepareOptionsMenu(Menu menu)这个方法非常的好用,我们可以定义boolean值来进行判断,如果满足条件就可以把菜单栏动态设置成某些状态,比如是否可见,text值等等。
比如我设定一个布尔值addingNew=flase,然后在其他方法体中对addingNew进行重新赋值。在覆盖onPrepareOptionsMenu(Menu menu)中,我们对addingNew进行判断,如果它的值是ture,我们ID为REMOVE_TODO的菜单项就设置为text=“cancel”。否则,我们ID为REMOVE_TODO的菜单项就设置为text=“remove”。
总之,就是可以进行一些判断,然后动态设置我们的菜单项状态。
另外一点,我们应该积累经验,学会很好的运用boolean值,这在很多地方都很有用。
下面是我的程序,从中可以总结出很多经验。
public class ToDolist extends Activity {
/** Called when the activity is first created. */
static final private int ADD_NEW_TODO=Menu.FIRST;
static final private int REMOVE_TODO=Menu.FIRST+1;
private boolean addingNew=false;//设置这个值来进行控制
private ListView myListView;
private EditText myEditText;
private ArrayList<String> todoItems;
private ArrayAdapter<String> aa;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myListView=(ListView)findViewById(R.id.myListView);
myEditText=(EditText)findViewById(R.id.myEditText);
todoItems=new ArrayList<String>();
int resID=R.layout.todolist;
aa=new ArrayAdapter<String>(this, resID, todoItems);
myListView.setAdapter(aa);
myEditText.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==KeyEvent.ACTION_DOWN){
if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){
todoItems.add(0, myEditText.getText().toString());
aa.notifyDataSetChanged();
myEditText.setText("");
cancelAdd();//初始设定REMOVE_TODO菜单项不可见,myEditText不可见
return true;
}
}
return false;
}});
registerForContextMenu(myListView);//设置myListView为一个ContextMenu的接收者
}
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
MenuItem itemAdd=menu.add(0, ADD_NEW_TODO, Menu.NONE, R.string.add_new);
MenuItem itemRem=menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
itemAdd.setIcon(R.drawable.add_new_item);
itemRem.setIcon(R.drawable.remove_item);
itemAdd.setShortcut('0', 'a');
itemRem.setShortcut('1', 'r');
return true;
}
public void onCreateContextMenu(ContextMenu menu,View v, ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Selected To Do Item");
menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
}//创建了ContextMenu
@Override
public boolean onPrepareOptionsMenu(Menu menu){
super.onPrepareOptionsMenu(menu);
int idx=myListView.getSelectedItemPosition();
//通过addingNew的判断来确定REMOVE_TODO的text的值
String removeTitle=getString(addingNew? R.string.cancel:R.string.remove);
MenuItem removeItem=menu.findItem(REMOVE_TODO);
removeItem.setTitle(removeTitle);
//只有当在添加的状态下(addingNew=true)或者ListView被selected的情况下REMOVE_TODO菜单项才可见
removeItem.setVisible(addingNew||idx>-1);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
int index=myListView.getSelectedItemPosition();
switch(item.getItemId()){
case(REMOVE_TODO):{
//此时的REMOVE_TODO菜单的text可能有两种状态:1.cancel 2.remove
if(addingNew){
//当addingNew=true的时候,REMOVE_TODO菜单的text=“cancel”,这时候我们就执行相应的取消操作
cancelAdd();
}else{
removeItem(index);
//当addingNew=false的时候,REMOVE_TODO菜单的text=“remov”,这时候我们就执行相应的删除操作
}
return true;
}
case(ADD_NEW_TODO):{
addNewItem();
return true;
}
}
return false;
}
@Override
public boolean onContextItemSelected(MenuItem item){
super.onContextItemSelected(item);
switch (item.getItemId()){
case(REMOVE_TODO):{
AdapterView.AdapterContextMenuInfo menuInfo;
menuInfo=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int index=menuInfo.position;
removeItem(index);
return true;
}
}
return false;
}
//在下面3个方法总执行相应的工作,并且对addingNew进行控制
private void addNewItem() {
// TODO Auto-generated method stub]
addingNew=true;
myEditText.setVisibility(View.VISIBLE);
myEditText.requestFocus();
}
private void removeItem(int _index) {
// TODO Auto-generated method stub
todoItems.remove(_index);
aa.notifyDataSetChanged();
}
private void cancelAdd() {
// TODO Auto-generated method stub
addingNew=false;
myEditText.setVisibility(View.GONE);
}
}
注:博客涉及的源码请在千寻资源库:www.qxzyk.com 下载获取,谢谢支持。
发表评论
-
我今天打算推荐一下近期自己制作的一款app-吃惑
2016-07-13 17:12 469你是否有这样的习惯 ... -
android listview优化几种写法详细介绍
2015-02-18 14:58 753这篇文章只是总结下getView里面优化视图的几种写法,就像 ... -
利用convertView优化ListView性能
2015-02-18 14:26 687这里提到的ListView只是作为一个典型代表 其实在A ... -
Android之ListView原理学习与优化总结
2015-02-05 15:50 717在整理前几篇文章的时候有朋友提出写一下ListView的性 ... -
sleep()和wait()有什么区别
2015-02-04 09:38 777sleep就是正在执行的线程主动让出cpu,cp ... -
线程与进程的区别
2015-01-27 20:12 688线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程 ... -
线程同步的几种方式(转)
2015-01-27 19:58 864进程中线程同步的四种常用方式: 1、 临界区(CCrit ... -
Eclipse提示No java virtual machine
2014-12-15 16:22 1031当你启动eclipse时出现... No java v ... -
解决客户端向服务器端传输中文乱码问题
2014-10-24 09:59 974客户端加码 Java code? ... -
重要通告
2012-02-05 11:36 905博客涉及到的所有源码,包括网站源码、Android源码等均在千 ... -
关于Android发送邮件
2011-09-11 08:40 3361Google 在发表 Android 手机平台时,强调的是超强 ... -
ImageButton点击背景切换事件
2011-08-23 14:30 2501问题:imagebutton初始显示图片1,当单击该image ... -
Android中ImageButton的运用详解
2011-08-23 14:13 2308ImageButton在Android的运用非常灵活,既可以在 ... -
Android拍照、录像、录音代码范例
2011-08-19 09:17 1269package com.cons.dcg.collect; i ... -
ArrayAdapter和BaseAdapter的区别是什么
2011-08-11 18:10 2143近期很多Android开发者来函表示对ArrayAdapt ... -
有关代码结构的优化若干
2011-08-11 18:08 1030避免建立对象 世界上没有免费的对象。虽然GC为每个线程都建立 ... -
ArrayAdapter和List的关系
2011-08-11 18:00 21601、使用ArrayAdapter(数组适配器)顾名思义,需要把 ... -
Manifest权限大全
2011-08-09 17:38 1057<uses-permission android:nam ... -
Android中创建自己的ContentProvider
2011-08-09 17:37 1369Android是如何实现应用程序之间数据共享的?我们以 ... -
深入理解Android消息处理系统——Looper、Handler、Thread
2011-08-09 11:09 741熟悉Windows编程的朋友可能知道Windows程序是消息驱 ...
相关推荐
本篇文章将详细介绍如何在Android中设置Menu,主要分为两种方法:通过Layout添加静态菜单元素和在Activity类中动态创建Menu。 **第一种方法:通过Layout添加静态菜单元素** 1. **创建XML布局文件**: 在`res/...
在某些情况下,可能需要在运行时根据应用程序的状态动态地添加或移除Menu项。这可以通过在`onPrepareOptionsMenu(Menu menu)`方法中进行操作: ```java @Override public boolean onPrepareOptionsMenu(Menu menu) ...
- 如果需要设置默认选中的菜单项,可以重写`onPrepareOptionsMenu(Menu menu)`方法,在其中调用`menu.findItem(R.id.your_menu_item_id).setChecked(true)`来设置。 5. **更新UI状态** - 当`RadioButton`的状态...
这时,我们可以在`onPrepareOptionsMenu(Menu menu)`方法中动态地添加、修改或删除菜单项。 总的来说,Android中的Menu机制是提供给用户便捷访问应用功能的关键组件。通过合理的布局设计、交互逻辑以及视觉效果,...
6. **菜单状态的控制**:在Activity的生命周期中,可以通过`onPrepareOptionsMenu(Menu menu)`方法来更新菜单项的状态,比如根据用户权限或应用状态改变某个菜单项的可见性或启用状态。 7. **检查与多选**:通过...
要动态更新Menu,我们需要在适当的时候调用`invalidateOptionsMenu()`方法,这会触发`onPrepareOptionsMenu`方法的调用。在`onPrepareOptionsMenu`中,我们可以根据需要添加、删除或修改菜单项。 ```java @Override...
`invalidateOptionsMenu()`方法会触发`onPrepareOptionsMenu`方法重新绘制菜单,你可以在这里根据当前的上下文状态修改菜单项的可见性或启用状态。 总结,整合`ListActivity`与`Menu`的关键在于理解它们各自的功能...
在实际项目中,我们还可以结合`onPrepareOptionsMenu(Menu menu)`方法来更新菜单的状态,比如根据用户权限或当前数据状态来显示或隐藏某些菜单项。 综上所述,理解和掌握`Menu`, `SubMenu`, `MenuItem`的使用是...
通过重写`onPrepareOptionsMenu`和`onCreateOptionsMenu`方法,可以实现菜单项的动态更新和自定义样式。例如,改变菜单项的颜色、字体大小等。 4. **TabMenu的理解与实现** TabMenu通常用于在多个视图间切换,...
- 在某些情况下,可能需要根据应用的状态动态地添加或移除菜单项,这可以通过`onPrepareOptionsMenu(Menu menu)`方法实现。 8. **菜单与Fragment的配合** - 如果应用使用了Fragment,菜单也可以在Fragment中创建...
方法名 触发时间onCreateOptionsMenu 进入Launcher后第一次点MENU按钮时触发onPrepareOptionsMenu 有两种情况:1、进入Launcher后第一次点MENU按钮触发onCreateOptionsMenu后调用;2、经过第一步,以后每次点MENU...
- 如果菜单需要动态更新,可以在`onPrepareOptionsMenu(Menu menu)`方法中进行,这个方法在菜单显示之前调用,适合根据应用状态改变菜单项。 总的来说,"AndroidMenu控件Demo"是一个很好的学习资源,通过它,...
Android还支持动态添加菜单项,这在某些情况下很有用,比如根据用户权限或状态来决定是否显示某个菜单。你可以在`onPrepareOptionsMenu`方法中实现这一功能: ```java @Override public boolean ...
- **onPrepareOptionsMenu(Menu menu)**:当OptionsMenu再次显示时(例如用户切换了其他应用后再返回),会调用此方法以允许开发者更新菜单的内容。这里可以动态地更改菜单项的状态,比如根据用户的权限决定是否显示...
- `onPrepareOptionsMenu(Menu menu)`:每次菜单即将显示时调用,可用于根据当前状态动态更新菜单。 - `onOptionsItemSelected(MenuItem item)`:用户点击菜单项时调用,执行相应的动作。 4. **菜单图标** 菜单...
这可以通过在`onPrepareOptionsMenu(Menu menu)`方法中修改菜单资源来实现。 总之,Android菜单系统提供了一种灵活的方式来展示和管理应用程序的功能选项。理解并熟练运用菜单对于Android开发者来说至关重要,因为...
在实际开发中,为了使菜单适应不同的屏幕尺寸和方向,可能需要使用`onPrepareOptionsMenu(Menu menu)`方法进行动态调整。同时,考虑到无障碍性,菜单项的顺序和标签应能被辅助技术如屏幕阅读器正确读取。 总的来说...
- `onPrepareOptionsMenu(Menu menu)`: 在每次菜单显示之前调用,可用来动态更新菜单。 - `onOptionsItemSelected(MenuItem item)`: 当用户点击菜单项时调用,处理用户的菜单选择。 二、创建单选菜单 1. **XML...
这可以通过在`onPrepareOptionsMenu(Menu menu)`方法中实现。 6. **菜单的可见性和启用状态**: 可以通过`MenuItem.setVisible(false)`和`MenuItem.setEnabled(false)`方法控制菜单项的可见性和可点击性。 7. **...
此外,我们还可以通过重写`onPrepareOptionsMenu(Menu menu)`方法来在菜单显示之前进行动态修改,例如根据用户状态或权限来隐藏或显示某些菜单项。 在实际应用中,菜单不仅限于动作栏,还可以通过其他方式呈现,如...