PopupMenu, которые показывают сетку вместо списка
Я создал PopupMenu, который появляется, когда я нажимаю кнопку, но показывает список пунктов меню. Я хочу знать, есть ли способ сделать это сеткой вместо списка.
button = (Button) findViewById(R.id.menu_btn);
final PopupMenu popupMenu = new PopupMenu(MainActivity.this, button);
popupMenu.getMenu().add("item 1");
popupMenu.getMenu().add("item 2");
popupMenu.getMenu().add("item 3");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupMenu.show();
}
});
4 ответа
Вы можете создать кастом PopupWindow
макет, который именно то, что вы хотите, и надуйте его перед show()
функция. Здесь http://developer.android.com/guide/topics/ui/menus.html или здесь Как создать пользовательское PopupMenu в Android, вы можете найти несколько примеров.
Вместо этого вы можете использовать собственный диалог, чтобы достичь того, что ищете
надеюсь, это поможет.
Я на самом деле понял, как это сделать
static final String TITLE = "title";
List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
PopupWindow popupMessage;
ImageButton popupButton;
GridView gridview;
View view;
// Use this to add items to the list that the ListPopupWindow will use
private void addItem(String title) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(TITLE, title);
data.add(map);
}
public void init() {
popupButton = (ImageButton) findViewById(R.id.menu_btn_btn);
view = LayoutInflater.from(this).inflate(R.layout.popup_window, null);
gridview = (GridView) view.findViewById(R.id.popup_window_gridview);
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("clicked", "ok");
}
});
SimpleAdapter adapter = new SimpleAdapter(
this,
data,
android.R.layout.activity_list_item, // You may want to use your own cool layout
new String[]{TITLE}, // These are just the keys that the data uses
new int[]{android.R.id.text1}); // The view ids to map the data to
addItem("one");
addItem("two");
addItem("three");
addItem("four");
addItem("five");
addItem("six";
gridview.setAdapter(adapter);
}
public void popupInit() {
popupButton.setOnClickListener(this);
popupMessage = new PopupWindow(view, LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
popupMessage.setContentView(view);
}
после того, как все, что вам нужно, это init() и popupInit() в onCreate()
К сожалению, gridView onItemClickListner не работает на самом деле, и я до сих пор не понял, почему!