弹出菜单很奇怪
Weird in popup menu
我在操作栏上创建了一个 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>
我路过的view是这样的
@Nullable
public View getView() {
return this.mView;
}
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中您期望的菜单。
您传递的 错误 view
正如@CodeRed 提到的那样。
替换
var popup: PopupMenu? = PopupMenu(context!!, view!!)
至
val vItem = getActivity().findViewById<View>(R.id.more)
var popup: PopupMenu? = PopupMenu(context!!, vItem)
我在操作栏上创建了一个 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>
我路过的view是这样的
@Nullable
public View getView() {
return this.mView;
}
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中您期望的菜单。
您传递的 错误 view
正如@CodeRed 提到的那样。
替换
var popup: PopupMenu? = PopupMenu(context!!, view!!)
至
val vItem = getActivity().findViewById<View>(R.id.more)
var popup: PopupMenu? = PopupMenu(context!!, vItem)