#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