2015-01-22 4 views
9

Я пытаюсь сделать приложение для Android, когда нажатие кнопки вызывает popupmenu. popupmenu генерируется, но не в правильном положении. Код выглядит следующим образом:Android popupmenu position

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 когда это Я нажимаю на него. Я хочу, чтобы он был создан в центре экрана.

Как это сделать?

ответ

3

Как из Docs говорит:

PopupMenu отображает меню в модальном всплывающем окне, привязанных к View. Всплывающее окно появится под анкером, если есть место, или выше, если нет. Если IME виден, всплывающее окно не будет перекрывать его, пока оно не коснется. Прикосновение вне всплывающего окна отклонит его.

Как я могу догадаться, что «View V»

public void showGenderPopup(View v) 

является TextView вы щелкаете, который связан с методом, когда она нажата, то есть PopupMenu покажет прямо под TextView ,

Не могли бы вы достичь своей цели с помощью Диалога? Для пользовательского AlertDialog вам просто нужно использовать метод

setView(View v) 

в AlertDialog.Builder, перед созданием самого диалога.

Для пользовательских вид вы либо следовать двумя путями:

XML: Создайте свой файл макета XML, а затем с помощью Inflater применить макет 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() { .. }); 

ДИНАМИЧЕСКИ:

Я буду использовать 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(); 
+1

Thing is Я также активирую группы в меню, чтобы получить переключатели. Не думайте, что я могу сделать это с помощью 'AlertDialog', так как это даст мне выбор кнопок, и я не хочу их использовать. Однако, если мне удастся дать мне радиокнопки, я буду использовать его. Будет ли Google как можно скорее. –

+1

Помните, что вы всегда можете установить пользовательский вид для использования внутри диалогового окна. Я сам использовал Dialog с 4 radioButtons, создав себе простой в использовании инструмент SQLite для отладки в моей базе данных прямо в приложении. Вам необходимо создать экземпляр пользовательского вида, в котором вы добавляете нужные вам радиокниги. Как только вы закончите, просто используйте b.setView (customView); так же, как описано в документах http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView(android.view.View) – FrancescoC

+0

Хорошо. Итак, для определения «popupmenu» я определил пользовательское меню. Для представления мне нужно будет определить новый XML-файл в файлах макета, а затем использовать его? Или каким-то другим способом? –

19
PopupMenu popup = new PopupMenu(this, v,Gravity.CENTER); 

использование выше код. Гравитация есть много вариантов, как центр/влево/вправо Обратитесь к документации ocne

+0

не работает. Может быть, потому, что здесь есть вид TextView, а не полный экран. Это мой вывод, не знаю, насколько я прав, но я думаю, что это не работает. –

+0

поместите текст в ширину match_parent, а затем попробуйте один раз. –

+0

Пробовал.Никаких изменений:/ –

Смежные вопросы