我正在尝试创建一个Android应用程序,单击按钮会引发popupmenu
。 popupmenu
正在生成,但不在正确的位置。代码如下:
menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/genderMale"
android:title="Male"
/>
<item
android:id="@+id/genderFemale"
android:title="Female"
/>
</group>
</menu>
执行弹出窗口的功能如下:
public void showGenderPopup(View v)
{
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.gender_popup, popup.getMenu());
popup.show();
}
点击它时,popupmenu
正在textview
下方创建{{1}}。我想让它在屏幕的中心生成。
如何去做?
答案 0 :(得分:22)
PopupMenu popup = new PopupMenu(this, v,Gravity.CENTER);
使用上面的代码。重力有许多选项,如中心/左/右检查文档ocne
答案 1 :(得分:3)
正如文档所说:
PopupMenu在固定到视图的模态弹出窗口中显示菜单。如果有空间,弹出窗口将显示在锚点视图下方,如果没有空间,则弹出窗口将显示在锚点视图下方。如果IME可见,弹出窗口将不会重叠,直到触摸它为止。触摸弹出窗口将会解雇它。
正如我猜测的那样,“观看v”
public void showGenderPopup(View v)
是您单击的TextView,它在单击时绑定到该方法,这意味着PopupMenu将显示在TextView的正下方。
你不是用Dialog实现目标吗?对于自定义AlertDialog,您只需使用方法
setView(View v)
在创建Dialog本身之前,AlertDialog.Builder的。
对于自定义视图,您可以采用以下两种方式:
XML: 创建XML布局文件,然后使用inflater通过View customView对象应用XML布局。 (布局文件称为customDialog.xml作为示例)
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customView = inflater.inflate(R.layout.customDialog, null);
RadioButton radioButton = (RadioButton) customView.findViewById(R.id.customDialogRadioButton);
radioButton.setOnClickListener(new OnClickListener() { .. });
动态:
我将使用LinearLayout作为示例。
LinearLayout customView = new LinearLayout(context);
RadioButton radioBtn = new RadioButton(context);
radioBtn.setOnClickListener(new OnClickListener() { .. });
customView.addView(radioBtn);
要创建对话框,请使用此代码
AlertDialog.Builder b = new AlertDialog.Builder(context);
b.setMessage("Example");
// set dialog's parameters from the builder
b.setView(customView);
Dialog d = b.create();
d.show();