Joe*_*ill 17 android menu menuitem android-actionbar
我有这样定义的MenuItem:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_starred"
android:icon="@drawable/btn_star"
android:title="@string/description_star"
android:checkable="true"
android:checked="true"
android:orderInCategory="1"
android:showAsAction="always" />
</menu>
Run Code Online (Sandbox Code Playgroud)
并以btn_star.xml这种方式定义:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="false"
android:drawable="@drawable/btn_star_off_normal" />
<item
android:state_checked="true"
android:drawable="@drawable/btn_star_on_normal" />
</selector>
Run Code Online (Sandbox Code Playgroud)
当我创建使用此选项菜单,但是,图标永远不会在其选中的状态显示,即使MenuItem的isChecked()属性为true.
我正在使用ActionBarSherlock控件,但是,如果我只是创建一个普通的选项菜单并调用,我得到相同的结果setChecked(true).btn_star_off无论项目的检查状态如何,它仍然显示drawable.
onOptionsItemSelected()正确调用该方法,我可以成功更改checked属性:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.isCheckable()) {
item.setChecked(!item.isChecked());
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
在此处设置断点会显示isChecked属性已更改,但图标本身未更新以反映正确的状态.
这里有什么我想念的吗?我做错了吗?我无法弄清楚为什么这不能正常工作.
Gau*_*ish 35
根据http://developer.android.com/guide/topics/ui/menus.html上的官方文档
注意:图标菜单中的菜单项(从"选项"菜单中)无法显示复选框或单选按钮.如果您选择在图标菜单中选中项目,则必须通过在每次状态更改时交换图标和/或文本来手动指示选中状态.
希望能帮助到你.
And*_*onu 11
如果您仍希望在xml drawable中定义行为(已选中,未选中),则这是您可以实现此目的的一种方法:
if (item.getItemId()==R.id.menu_item){
item.setChecked(!item.isChecked());
StateListDrawable stateListDrawable = (StateListDrawable) getResources().getDrawable(R.drawable.selector_drawable);
int[] state = {item.isChecked()?android.R.attr.state_checked:android.R.attr.state_empty};
stateListDrawable.setState(state);
item.setIcon(stateListDrawable.getCurrent());
}
Run Code Online (Sandbox Code Playgroud)
有点简单的方法(没有xml-states文件):
configChecked = !configChecked;
item.setChecked(configChecked);
item.setIcon(configChecked ? R.drawable.check_on : R.drawable.check_off);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17502 次 |
| 最近记录: |