Заполнить всплывающее меню без файла XML в android

У меня есть этот код, он отлично работает. Только я хочу сделать это динамическим без файла xml (actions.xml). Как мне это сделать?

public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.actions, popup.getMenu());
    popup.show();
}

person Mitch    schedule 05.03.2012    source источник


Ответы (2)


Используйте popup.getMenu(), а затем добавляйте элементы напрямую, используя различные перегрузки _ 2_.

person kabuko    schedule 05.03.2012
comment
Приятно спасибо! :) Вы знаете, как настроить стиль PopupMenu ?? - person Mitch; 06.03.2012
comment
Я не знаю, как это делать конкретно, нет. Вы можете посмотреть эти related вопросы. - person kabuko; 06.03.2012
comment
Как получить выбранное значение? - person Igor Janković; 16.04.2019

в файле xml удалите неиспользуемые элементы (просто для реализации темы меню). Итак, это будет примерно так:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:theme="@style/AppTheme" />

then use getMenu to add new menu items as below:

Button btn1= (Button) findViewById(R.id.btn_test);
PopupMenu popup = new PopupMenu(yourFormName.this, btn1);  
                    //Inflating the Popup using xml file  
                 popup.getMenu().add("Menu1 Label");
                 popup.getMenu().add("Menu2 Label");
                 popup.getMenuInflater().inflate(R.menu.YourXMLFileName, popup.getMenu());  


                    //registering popup with OnMenuItemClickListener  
                    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {  
                     public boolean onMenuItemClick(MenuItem item) {  
                       //---your menu item action goes here ....
                      Toast.makeText(DisplayTransactions.this,"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show();  
                      return true;  
                     }  
                    });  
                    popup.show();//showing popup menu  
person Hussein mahyoub    schedule 11.04.2016