web-dev-qa-db-ja.com

Androidポップアップメニューの位置

ボタンをクリックするとpopupmenuが発生するAndroidアプリを作成しようとしています。 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();
}

ここをクリックすると、popupmenutextviewのすぐ下に作成されます。画面中央に生成させたい。

それについてどうやって行くのですか?

ドキュメントから言うように:

PopupMenuは、ビューにアンカーされたモーダルポップアップウィンドウにメニューを表示します。スペースがある場合はポップアップがアンカービューの下に表示され、スペースがない場合はその上にポップアップが表示されます。 IMEが表示されている場合は、タッチするまでポップアップは重なりません。ポップアップの外側をタッチすると、ポップアップが閉じます。

私が推測しているように、その「ビューv」

public void showGenderPopup(View v)

クリックしているTextViewです。クリックするとメソッドにバインドされます。つまり、PopupMenuはTextViewのすぐ下に表示されます。

ダイアログで目標を達成しませんか?カスタムAlertDialogの場合は、メソッドを使用するだけです

setView(View v)

ダイアログ自体を作成する前のAlertDialog.Builderの.

カスタムビューの場合は、次の2つの方法があります。

XML:XMLレイアウトファイルを作成し、インフレーターを使用してXMLレイアウトをビューの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() { .. });

動的に:

例として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();
4
FrancescoC
  PopupMenu popup = new PopupMenu(this, v,Gravity.CENTER);  

上記のコードを使用してください。重力には、中央/左/右のような多くのオプションがあります。

22
RamBabu Pudari