Android “按钮单击方式”下拉列表上的自定义菜单

Android “按钮单击方式”下拉列表上的自定义菜单,android,android-alertdialog,android-dialog,android-styles,optionmenu,Android,Android Alertdialog,Android Dialog,Android Styles,Optionmenu,我正在尝试实现flipkart应用程序的操作栏功能 为此,我已经成功地创建了一个自定义操作栏,但我在溢出图标单击时将菜单显示为下拉菜单时遇到了问题 如果我试一试,我得到的菜单没有图标(4.2.2)在我的屏幕底部中心。使用自定义对话框或警报对话框会使背景淡入淡出,并且它们也会显示在屏幕中央 我应该怎么做才能获得与上图所示类似的功能?我有一个简单的方法,就是将溢出菜单放在您的旁边,并将所有这些菜单添加为子菜单,这样您就可以实现此视图。这个溢出菜单也会一如既往地显示在ActionBar中 <it

我正在尝试实现flipkart应用程序的操作栏功能

为此,我已经成功地创建了一个自定义操作栏,但我在溢出图标单击时将菜单显示为下拉菜单时遇到了问题

如果我试一试,我得到的菜单没有图标(4.2.2)在我的屏幕底部中心。使用自定义对话框或警报对话框会使背景淡入淡出,并且它们也会显示在屏幕中央


我应该怎么做才能获得与上图所示类似的功能?

我有一个简单的方法,就是将溢出菜单放在您的旁边,并将所有这些菜单添加为子菜单,这样您就可以实现此视图。这个溢出菜单也会一如既往地显示在ActionBar中

<item
    android:icon="@drawable/ic_action_overflow"
    android:showAsAction="always">
    <menu>

        <item
            android:id="@+id/menu_login"
            android:icon="@drawable/login"
            android:title="login"/>
    </menu>
</item>

试试这种方法,希望这能帮助您解决问题。

请按照链接说明显示带有图像的弹出菜单项,您可以使用showAtLocation()将弹出菜单显示为所需位置


检查:

您可以轻松使用
列表PopupWindow
和任何方便的
适配器

// create any adapter with any data, just as for ordinary ListView
    SimpleAdapter simpleAdapter= new SimpleAdapter(this, dataSet, android.R.layout.simple_list_item_2,
                            new String[] {"Name", "Tel. no."},
                            new int[] {android.R.id.text1, android.R.id.text2});

ListPopupWindow listPopup = new ListPopupWindow(this); // feed context to ListPopupWindow
listPopup.setAdapter(simpleAdapter); // set adapter to created ListPopupMenu

listPopup.setAnchorView(findViewById(id)); 
// id - any id of any view on the screen. Under this view popup appears. It may be MenuItem as well

listPopup.setWidth(getWidestView(simpleAdapter)); 
// as popup width equals the anchor width, use getWidestView method for proper list displaying. 
// ListPopupWindow.WRAP_CONTENT won't work here

listPopup.show();

GetWidetView
您可以在这里找到的代码片段:

如果您正在寻找一个更为重要的弹出菜单,并且不害怕Kotlin,您可以尝试:-不需要用XML声明菜单,您可以更轻松地处理单击操作。

我可以让图标显示的唯一方法是在打开菜单之前调用setForceIcons菜单

/**
 * Make a call to setForceIcons to cause icons to show.
 *
 * @param popup
 */
public static void showForceIcons (final PopupMenu popup)
{
    try {
        Field[] fields = popup.getClass().getDeclaredFields();
        for (Field field : fields) {
            if ("mPopup".equals(field.getName())) {
                field.setAccessible(true);
                Object menuPopupHelper = field.get(popup);
                Class<?> classPopupHelper = Class.forName(menuPopupHelper.getClass().getName());
                Method setForceIcons = classPopupHelper.getMethod("setForceShowIcon", boolean.class);
                setForceIcons.invoke(menuPopupHelper, true);
                break;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
/**
*调用setForceIcons以显示图标。
*
*@param弹出窗口
*/
公共静态无效显示力图标(最终弹出菜单)
{
试一试{
Field[]fields=popup.getClass().getDeclaredFields();
用于(字段:字段){
if(“mPopup.equals(field.getName())){
字段。setAccessible(true);
Object menuPopupHelper=field.get(弹出窗口);
Class CLASSPOPUSCURLPER=Class.forName(menuPopupHelper.getClass().getName());
方法setForceIcons=classpopunculper.getMethod(“setForceShowIcon”,boolean.class);
调用(menuPopupHelper,true);
打破
}
}
}捕获(例外e){
e、 printStackTrace();
}
}

请显示一些代码。@IllegalArgument您想要哪种代码?我尝试了三种,我提供的答案链接,自定义对话框和警报对话框。所有这些都可以工作,但没有提供确切的功能。检查:任何代码都可以工作。合适的是menu.xml和java代码。我也使用ListMenuOpup和基于xml的方法以多种方式实现了这一点。需要看看什么最适合你的需要。@IllegalArgument好的,你有什么例子来说明如何使用选项菜单?目前,当使用showOptionMenu时,我会在屏幕的底部中间看到菜单,并且没有图标(在4.2.2上测试)。谢谢,虽然您的评论非常有用,但其他人可能会将此答案视为一个链接。请再添加一些数据。更简单更容易:)请提供更多信息?如何在菜单标签中添加一个项目??使用反射是一个很难解决的问题,如果可以的话,应该避免。选择的答案对我有效,请尝试一次。