如何在android中的子onclick
上转到主菜单menu
。我正在尝试这个但却无法做到这一点。
这是java
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
sub = menu.getItem(0).getSubMenu();
sub.setHeaderTitle("sub menu...");
sub.setHeaderIcon(R.drawable.ic_voice);
//Toast.makeText(this, "submenu label=", Toast.LENGTH_SHORT).show();
MenuItem item = menu.findItem(R.id.action_settings);
TextView iv= (TextView) item.getActionView().findViewById(R.id.action_settings);
sub.getItem(0).setActionView(iv);
Toast.makeText(this, "before onclick listener=", Toast.LENGTH_SHORT).show();
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "-submenu header title clicked", Toast.LENGTH_SHORT).show();
}
});
return super.onPrepareOptionsMenu(menu);
}
这是我的menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/action_refresh"
android:orderInCategory="100"
android:title="Refresh" />
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_voice"
android:title="Settings"
app:actionViewClass="android.widget.TextView">
<menu>
<item
android:id="@+id/change_password"
android:title="change password" />
<item
android:id="@+id/user_details"
android:title="user details" />
</menu>
</item>
</menu>
代码
当我们点击submenu
文字时,显示为submenu
它应该返回mainmenu
答案 0 :(得分:0)
Android没有提供将onClickListener
设置为SubMenu
标头的某种机制,但您可以使用黑客攻击。
首先,摆脱SubMenu
标题:
SubMenu sub = menu.findItem(R.id.action_settings).getSubMenu();
sub.clearHeader();
使用getItem(0)
并不安全,因为您商品的顺序可能会发生变化,因此我使用了findItem(R.id.action_settings)
。
接下来,您应该再向item
添加一个SubMenu
:
<menu>
<item
android:id="@+id/sub_title"
android:title="sub menu..."/>
<item
android:id="@+id/change_password"
android:title="change password" />
<item
android:id="@+id/user_details"
android:title="user details" />
</menu>
但现在所有三个items
看起来都一样,所以你需要改变第一个MenuItem
的颜色
MenuItem headItem = sub.findItem(R.id.sub_title);
SpannableString s = new SpannableString(headItem.getTitle());
s.setSpan(new ForegroundColorSpan(Color.GRAY), 0, s.length(), 0);
headItem.setTitle(s);
此外,不要将onPrepareOptionsMenu()
用于此目的,因为每次打开menu
时都会调用,您可以将所有代码放在onCreateOptionsMenu()
中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SubMenu sub = menu.findItem(R.id.action_settings).getSubMenu();
sub.clearHeader();
MenuItem headItem = sub.findItem(R.id.sub_title);
SpannableString s = new SpannableString(headItem.getTitle());
s.setSpan(new ForegroundColorSpan(Color.GRAY), 0, s.length(), 0);
headItem.setTitle(s);
return true;
}
最后一步 - 听取点击MenuItem
:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.sub_title:
Toast.makeText(this, "-submenu header title clicked", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}