Странное во всплывающем меню

#android #kotlin #popupmenu

#Android #kotlin #popupmenu

Вопрос:

Я создал menu значок на панели действий. При нажатии на него я ожидаю, что он покажет что-то вроде этого

введите описание изображения здесь

Но вместо этого он отображается с левой стороны.

введите описание изображения здесь

В чем может быть эта проблема?

  override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
        inflater!!.inflate(R.menu.fragment_menu, menu)
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
            val id = item.getItemId()
            if (id == R.id.more) {
                var popup: PopupMenu? = PopupMenu(context!!, view!!)
                popup?.menuInflater?.inflate(R.menu.pop_up_menu, popup.menu)
                popup?.show()

                popup?.setOnMenuItemClickListener({ item: MenuItem? ->
                    when (item!!.itemId) {
                        R.id.logOut -> {
                        }
                    }
                    true
                })
            } else
                super.onOptionsItemSelected(item)

            return true
        }
  

fragment_menu

 <?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/more"
          android:title="menu"
          app:showAsAction="always"
          android:icon="@drawable/ic_more"/>
</menu>
  

pop_up_menu

 <?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/logOut"
            app:showAsAction="always"
            android:title="Log Out"
    />

</menu>
  

Представление, которое я передаю, это

 @Nullable
    public View getView() {
        return this.mView;
    }
  

Комментарии:

1. достаточно странно.

2. опубликуйте свой файл R.menu

3. Зависит от того, что view вы передаете конструктору PopupMenu.

4. Ах, подождите, только что понял кое-что: почему вы раздуваете всплывающее окно onOptionsItemSelected() ? Это какое-то дополнительное меню? Если нет, просто поместите это onCreateOptionsMenu()

5. @AIMINPAN готово.

Ответ №1:

Вы передаете неправильно view , как упоминал @CodeRed.

Заменить

 var popup: PopupMenu? = PopupMenu(context!!, view!!)
  

Для

 val vItem = getActivity().findViewById<View>(R.id.more)
var popup: PopupMenu? = PopupMenu(context!!, vItem)
  

Ответ №2:

Меню в ActionBar заполняется системой автоматически, вам не нужно писать код для его заполнения.

Чтобы получить меню, подобное рисунку 1, fragment_menu должно быть похоже:

 <menu>
  <item android:title="Search" />
  <item android:title="Locate" />
  <item android:title="Refresh" />
  <item android:title="Help" />
  <item android:title="Check for update" />
</menu>
  

onOptionItemSelected используется для обработки при нажатии на меню выше, а не для отображения меню.

всплывающее меню — это меню с произвольной позицией, подобное меню правой кнопки мыши в Windows, а не то, которое вы ожидаете увидеть на рисунке 1.

Комментарии:

1. Я хочу, чтобы выход отображался точно так же, как на рисунке 1