【问题标题】:How to set icon at right in custom popup menu如何在自定义弹出菜单的右侧设置图标
【发布时间】:2018-07-24 10:30:49
【问题描述】:

单击按钮时,我将显示包含语言列表的菜单。现在我希望图标显示在菜单中每个项目的标题右侧。我用谷歌搜索但没有找到合适的解决方案,请帮助我。

menu_language.xml:

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


    <item
        android:id="@+id/nav_arabic"
        android:title="Arabic" />
    <item
        android:id="@+id/nav_southAfrica"
        android:icon="@drawable/ic_earphones"
        android:title="Afrikaans"
        />
    <item
        android:id="@+id/nav_albania"
        android:icon="@drawable/ic_earphones"
        android:title="Albanian " />
    <item
        android:id="@+id/nav_armenian"
        android:title="Armenian" />
    <item
        android:id="@+id/nav_azerbaijani"
        android:icon="@drawable/ic_earphones"
        android:title="Azerbaijani" />
    <item
        android:id="@+id/nav_bangla"
        android:icon="@drawable/ic_earphones"
        android:title="Bangla" />
    <item
        android:id="@+id/nav_basque"
        android:icon="@drawable/ic_earphones"
        android:title="Basque" />
    <item
        android:id="@+id/nav_belarusian"
        android:title="Belarusian" />

语言.java:

 public void showMenu(View v) {
        PopupMenu popup = new PopupMenu(getActivity(), v);

        Object menuHelper;
        Class[] argTypes;
        try {
            Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup");
            fMenuHelper.setAccessible(true);
            menuHelper = fMenuHelper.get(popup);
            argTypes = new Class[]{boolean.class};
            menuHelper.getClass().getDeclaredMethod("setForceShowIcon", argTypes).invoke(menuHelper, true);
        } catch (Exception e) {

        }

        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.menu_language, popup.getMenu());
        popup.setOnMenuItemClickListener(this);

到目前为止,该图标位于菜单的左侧,但我希望它位于标题的右侧。请帮忙,有什么线索吗?

【问题讨论】:

  • 喂墨菲!您正在使用内置菜单 xml 文件来弹出菜单!默认情况下,menuIcon 始终位于左侧属性,因为它们可以根据屏幕大小展开右侧的标签
  • 这是你可以做的!您可以在菜单的布局文件夹中设计一个自定义布局文件!然后你得到菜单充气机并要求它取消旧菜单并在那里添加你的自定义布局! ?想要代码示例?
  • 或者只是在 longPress 上弹出的 contexrMenu 有选项供您展示您想要的每一个!但如果你坚持使用 optionMenu,你必须选择我的解决方案
  • enter link description。试试这个
  • @Rizwanatta 谢谢,是的,如果你分享例子会更清楚。

标签: java android popupmenu country-codes menu-items


【解决方案1】:

对于不能使用菜单的自定义布局,一个替代选项是PopupWindow 这可以帮助您使用自定义视图显示任意窗口,您可以设置样式并将其用作菜单

做这样的事情

PopupWindow popupwindow_obj = popupDisplay();
popupwindow_obj.showAsDropDown(clickbtn, -40, 18); // where u want show on view click event popupwindow.showAsDropDown(view, x, y);

public PopupWindow popupDisplay() 
{ 

    final PopupWindow popupWindow = new PopupWindow(this);

    // inflate your layout or dynamically add view
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View view = inflater.inflate(R.layout.mylayout, null);

    TextView item = (TextView) view.findViewById(R.id.button1);

    popupWindow.setFocusable(true);
    popupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
    popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
    popupWindow.setContentView(view);

    return popupWindow;
}

创建一个这样的xml文件

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/button1"
        drawableRight='@drawbale/icon'
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Window test" />
</LinearLayout>

【讨论】:

  • 为什么需要xml文件?我需要在哪里增加我的菜单?
  • 您无法自定义其预建的菜单文件!但是您可以做的只是制作一个自定义设计菜单选项,类似于 xml 文件并膨胀它!
  • 但我有成千上万的项目,所以这样它会非常大的 xml
  • 更好的选择就像有一个带有微调器的popupOpened!有语言名称和图像!您可以从 strings.xml 的 String-array 中填充它,或者也可以使用 java
  • 是的,但是菜单是否有任何选项可以在右侧显示图标?男人唯一的图标,我们必须改变为什么这么难。
猜你喜欢
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多