Android弹出菜单位置

Pra*_*ava 12 android popupmenu

我正在尝试制作一个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>
Run Code Online (Sandbox Code Playgroud)

执行弹出窗口的功能如下:

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();
}
Run Code Online (Sandbox Code Playgroud)

popupmenutextview在我点击它的时候创建的.我希望它在屏幕的中心生成.

怎么去呢?

Ram*_*ari 22

  PopupMenu popup = new PopupMenu(this, v,Gravity.CENTER);  
Run Code Online (Sandbox Code Playgroud)

使用上面的代码.重力有很多选项,如中心/左/右检查文档ocne

  • 只适用于API 19+,喜欢忘记上下文的所有这些评论...... (6认同)

Fra*_*coC 4

正如文档中所说:

PopupMenu 在锚定到视图的模式弹出窗口中显示菜单。如果有空间,弹出窗口将出现在锚视图下方;如果没有空间,则弹出窗口将出现在锚视图上方。如果 IME 可见,则弹出窗口不会与其重叠,直到触摸它为止。触摸弹出窗口外部会将其关闭。

正如我所猜测的,“View v”

public void showGenderPopup(View v)
Run Code Online (Sandbox Code Playgroud)

是您正在单击的 TextView,它在单击时绑定到方法,这意味着 PopupMenu 将显示在 TextView 的正下方。

难道你不会通过对话来实现你的目标吗?对于自定义 AlertDialog,您只需要使用方法

setView(View v)
Run Code Online (Sandbox Code Playgroud)

在创建对话框本身之前,创建 AlertDialog.Builder 的。

对于您的自定义视图,您可以采用两种方式:

XML:创建 XML 布局文件,然后使用扩展程序将 XML 布局应用到 View customView 对象上。(布局文件名为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() { .. });
Run Code Online (Sandbox Code Playgroud)

动态:

我将使用 LinearLayout 作为示例。

LinearLayout customView = new LinearLayout(context);

RadioButton radioBtn = new RadioButton(context); 
radioBtn.setOnClickListener(new OnClickListener() { .. });

customView.addView(radioBtn);
Run Code Online (Sandbox Code Playgroud)

要创建对话框,您可以使用此代码

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();
Run Code Online (Sandbox Code Playgroud)

  • 问题是我还在菜单上激活组以获得单选按钮。我不认为我可以用“AlertDialog”来做到这一点,因为它会给我按钮的选择,而我不想使用它们。但是,如果它确实给了我单选按钮,我会使用它。会尽快谷歌。 (2认同)