在操作栏点击按钮弹出菜单(Popup menu on click of a button in ac

2019-07-29 07:04发布

我试图执行一个操作栏,其中在点击一个按钮显示弹出菜单。 这里的菜单。 XML(操作栏中的菜单项)

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/search"
    android:icon="@drawable/ic_action_search"
    android:orderInCategory="0"
    android:showAsAction="always"
    android:title="@string/menu_search"/>
<item
    android:id="@+id/refresh"
    android:icon="@drawable/ic_action_refresh"
    android:orderInCategory="1"
    android:showAsAction="always"
    android:title="@string/menu_refresh"/>


 <Item
    android:id="@+id/popup"
    android:icon="@drawable/ic_action_search"
    android:onClick="showPopup"
    android:orderInCategory="1"
    android:showAsAction="always"
    android:title="@string/menu_search" />

我想显示出对具有项目ID“@ + ID /弹出”的点击弹出菜单。

这里是弹出式菜单的XML

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/item1"
    android:icon="@drawable/ic_action_search"
    android:orderInCategory="0"
    android:showAsAction="always"
    android:title="@string/menu_search"/>
<item
    android:id="@+id/item2"
    android:icon="@drawable/ic_action_search"
    android:orderInCategory="1"
    android:showAsAction="always"
    android:title="@string/menu_search"/>

这里是按钮的OnClick方法

public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.overflow, popup.getMenu());
    popup.show();
}

而问题是,没有弹出窗口显示了该按钮的点击。 需要帮助的乡亲。

Answer 1:

我发现这个在这里: http://developer.android.com/guide/topics/ui/menus.html

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/selectImg"
        android:icon="@android:drawable/ic_dialog_dialer"
        android:showAsAction="always">

        <menu>
            <item android:id="@+id/top"
                android:title="@string/topimg"/>
            <item android:id="@+id/bottom"
                android:title="@string/botimg" />
        </menu>

    </item>
</menu>

你可以把菜单中的菜单被点击的项目时提出的子菜单。 然后,在Java中,你可以用同样的方法如常。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
       // View v = findViewById(R.id.f);
        switch (item.getItemId()) {
            case R.id.top:
                //action
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

在XML“顶”的ID仍是公认即使它是一个子菜单。 这个工作对我来说,它看起来就像弹出菜单。



Answer 2:

喜每个人,这是我自己的解决方案:我创建了showPopup方法,然后我把它叫做在onOptionsItemSelected这样的:

public void showPopup(){
    View menuItemView = findViewById(R.id.menu_save);
    PopupMenu popup = new PopupMenu(getActivity(), menuItemView);
    MenuInflater inflate = popup.getMenuInflater();
    inflate.inflate(R.menu.popup, popup.getMenu());
    popup.show();

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.menu_save:    
        showPopup();
        return true;
    default:
        return super.onOptionsItemSelected(item);
}

}

popup.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/decon"
    android:showAsAction="ifRoom"
    android:title="@string/decon"/>

<item
    android:id="@+id/mRes"
    android:showAsAction="ifRoom"
    android:title="@string/mesRes"/>

</menu>

main.xml中=>这就是所谓的onCreateOptionsMenu

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/menu_save"
    android:enabled="true"
    android:icon="@drawable/action_save"
    android:showAsAction="ifRoom|withText"
    android:title="@string/action_save"
    android:visible="true"/>

</menu>

最后我

implements PopupMenu.OnMenuItemClickListener to @Override onMenuItemClick method.


Answer 3:

由于弹出菜单是一个菜单,你必须通过实现“onOptionsItemSelected”来处理这个问题。 你就可以说什么为每个菜单选项做。 它将取代你所定义的“点击”选项,将自动被调用。



Answer 4:

尝试改变“这”到getActivity()。

public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(getActivity(), v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.overflow, popup.getMenu());
    popup.show();
}

希望能帮助到你..!!



Answer 5:

我找到了解决这个。 相反,使用菜单XML充气弹出菜单中,我做了一个XML布局文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#8b8989"
android:orientation="vertical"
android:padding="10dip" >

<TextView
    android:id="@+id/menuItem1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:text="@string/menu1" />

<TextView
    android:id="@+id/menuItem2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:text="@string/menu2" />
<TextView
    android:id="@+id/menuItem3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:text="@string/menu3" />
</LinearLayout> 

和我改变了的onClick方法

public void showPopup(View v) {
    LayoutInflater inflater = (LayoutInflater) MainActivity.this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        PopupWindow pw = new PopupWindow(inflater.inflate(
                R.layout.overflow_layout, null, false), 300, 400, true);
        pw.showAtLocation(findViewById(R.id.container), Gravity.CENTER, 0,
                0);
}

这解决了问题



Answer 6:

android:onClick="popup"

可能是你应该将其更改为android:onClick="showPopup"



文章来源: Popup menu on click of a button in action Bar