显示弹出菜单上的'ActionBar`项目点击弹出、菜单、项目、ActionBar

2023-09-12 01:44:20 作者:只若初见

我有一个动作条与它的行动项目。点击确定项目确定之后,我想显示弹出式菜单。 我实现了这个方法,但我想它固定到行动项目,或到动作条,不从布局的任何视图。如何获得某种观点,从菜单项

其固定

 公共布尔onOptionsItemSelected(菜单项项){
    PopupMenu的弹出菜单=新的PopupMenu的(这一点,??????); //去什么看法吗?
    popupMenu.inflate(R.menu.counters_overflow);
    popupMenu.show();
    // ...
    返回true;
}
 

解决方案

所以,最后我找到解决办法。当你想固定弹出菜单中的动作条为ActionItem你需要找到视图呈现ActionItem。 简单的查找视图findViewById()其中id是相同的XML的菜单项的ID。

DISPLAYING弹出:

 公共布尔onOptionsItemSelected(菜单项项){
    // ...

    查看menuItemView = findViewById(R.id.menu_overflow); //相同的ID菜单ID
    PopupMenu的弹出菜单=新的PopupMenu的(这一点,menuItemView);
    popupMenu.inflate(R.menu.counters_overflow);
    // ...
    popupMenu.show();
    // ...
    返回true;
}
 

MENU:

 < XML版本=1.0编码=UTF-8&GT?;
<菜单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>

     ....

     <项目
    机器人:ID =@ + ID / menu_overflow
    机器人:图标=@可绘制/ ic_overflow
    机器人:showAsAction =ifRoom
    机器人:标题=@字符串/ menu_overflow/>

     ....

< /菜单>
 
跟我学Android之八 ActionBar与菜单

如果菜单项是不可见的(是溢出),这是行不通的。所以你要检查这种情况,并锚定到其他视图findViewById返回null。

I have an ActionBar with an action item on it. After clicking on the action item, I want to show a popup menu. I implemented this method, but I want to anchor it to the action item or to the ActionBar, not to any view from layout. How to get some kind of view to anchor it from MenuItem?

public boolean onOptionsItemSelected(MenuItem item) {
    PopupMenu popupMenu = new PopupMenu(this, ??????); // What view goes here?
    popupMenu.inflate(R.menu.counters_overflow);
    popupMenu.show();
    // ...
    return true;
}

解决方案

So finally I found solution. When you want to anchor popupmenu to ActionItem in ActionBar you need to find view that renders ActionItem. Simple find view with findViewById() where id is same as id of your menu item in xml.

DISPLAYING POPUP:

public boolean onOptionsItemSelected(MenuItem item) {
    // ...

    View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID
    PopupMenu popupMenu = new PopupMenu(this, menuItemView); 
    popupMenu.inflate(R.menu.counters_overflow);
    // ...
    popupMenu.show();
    // ...
    return true;
}

MENU:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

     ....

     <item
    android:id="@+id/menu_overflow"
    android:icon="@drawable/ic_overflow"
    android:showAsAction="ifRoom"
    android:title="@string/menu_overflow"/>

     ....

</menu>

If menu item is not visible (is in overflow) it does not work. findViewById returns null so you have to check for this situation and anchor to another view.