studio example android popup popupwindow popupmenu android-popupwindow

example - popupwindow android studio



¿Cómo reemplazo mi código popupmenu con list popupwindow? (2)

Aquí está mi ejemplo para crear show a ListPopupWindow

Primero , cree el diseño item_list_popup_window para cada elemento de ListPopupWindow

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#e4e4e4" android:paddingTop="1dp" android:orientation="horizontal"> <TextView android:id="@+id/text_title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" /> <Button android:id="@+id/button_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Delete" /> </LinearLayout>

En segundo lugar, crea un Adapter para tu ListPopupWindow como

public class ListPopupWindowAdapter extends BaseAdapter{ private Activity mActivity; private List<String> mDataSource = new ArrayList<>(); private LayoutInflater layoutInflater; private OnClickDeleteButtonListener clickDeleteButtonListener; ListPopupWindowAdapter(Activity activity, List<String> dataSource, @NonNull OnClickDeleteButtonListener clickDeleteButtonListener){ this.mActivity = activity; this.mDataSource = dataSource; layoutInflater = mActivity.getLayoutInflater(); this.clickDeleteButtonListener = clickDeleteButtonListener; } @Override public int getCount() { return mDataSource.size(); } @Override public String getItem(int position) { return mDataSource.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null){ holder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.item_list_popup_window, null); holder.tvTitle = (TextView) convertView.findViewById(R.id.text_title); holder.btnDelete = (Button) convertView.findViewById(R.id.button_delete); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } // bind data holder.tvTitle.setText(getItem(position)); holder.btnDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clickDeleteButtonListener.onClickDeleteButton(position); } }); return convertView; } public class ViewHolder{ private TextView tvTitle; private Button btnDelete; } // interface to return callback to activity public interface OnClickDeleteButtonListener{ void onClickDeleteButton(int position); } }

En tercer lugar, crea una función para crear y mostrar ListPopupWindow

private void showListPopupWindow(View anchorView) { final ListPopupWindow listPopupWindow = new ListPopupWindow(this); listPopupWindow.setWidth(600); List<String> sampleData = new ArrayList<>(); sampleData.add("A"); sampleData.add("B"); sampleData.add("CCCCCCCCCCCCCC"); sampleData.add("D"); sampleData.add("EEEEEEEEE"); listPopupWindow.setAnchorView(anchorView); ListPopupWindowAdapter listPopupWindowAdapter = new ListPopupWindowAdapter(this, sampleData, new ListPopupWindowAdapter.OnClickDeleteButtonListener() { @Override public void onClickDeleteButton(int position) { Toast.makeText(MainActivity.this, "Click delete " + position, Toast.LENGTH_SHORT).show(); listPopupWindow.dismiss(); } }); listPopupWindow.setAdapter(listPopupWindowAdapter); listPopupWindow.show(); }

Finalmente, puede mostrar ListPopupWindow por

showListPopupWindow(v);

por ejemplo, si desea mostrarlo cuando haga clic en el botón

anyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showListPopupWindow(v); } });

La demo completa está aquí

Actualmente, estoy creando programáticamente un popupmenu que muestra una lista de plantas y un título. Sin embargo, cambiar el color de fondo del título y agregar un botón para cerrar el título se está convirtiendo en una pesadilla.

Quiero reemplazar este popupmenu con una ventana emergente de lista para poder agregar un archivo XML con el atributo de fondo para el título con un color negro como fondo y un botón de cierre a la derecha y fondo blanco para los elementos en el menú. ¿Hay alguna manera de lograr esto con la ventana emergente de lista? Aquí está mi código para eso:

private void floorMenu(ImageView btnFloorMenu){ MapData data = new MapDao(MyPlugin.mapId); final List<Floor> flList = dao.getFloors(); // set popupMenu final PopupMenu floorsPm = new PopupMenu(MapViewActivity.this,btnFloorMenu); MenuItem titleItem = floorsPm.getMenu().add(Menu.NONE, Menu.NONE, Menu.NONE, "Floors"); int i = 1; for(Floor fl : flList) { floorsPm.getMenu().add(Menu.NONE, i,i, fl.getName()); if(i>3) break; i++; } // add popup listener floorsPm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { // onClick @Override public boolean onMenuItemClick(MenuItem item){ // get floorname int flOrder = item.getOrder(); if(flOrder == Menu.NONE ) return true; flOrder--; final String floorId = flList.get(flOrder).getMapId(); // set camera to floor runOnUiThread(new Runnable() { @Override public void run() { floorsPm.dismiss(); mapFragment.getMapManager().setCameraLayer(floorId, false); Log.d(TAG, "post cameraLayer set"); changedSteps = true; pauseNav(); } }); return true; } }); floorsPm.show(); }


Por favor, pruebe este código. Quizás no le guste esto.

private void floorMenu(ImageView btnFloorMenu){ final Dialog customDialog = new Dialog(this); customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); customDialog.setContentView(R.layout.item_dialog_coustom_design); TextView clickItem = (TextView)customDialog.findViewById(R.id.item_click); TextView clickItem1 = (TextView)customDialog.findViewById(R.id.item_click1); TextView clickItem2 = (TextView)customDialog.findViewById(R.id.item_click2); Button btnClose = (Button)customDialog.findViewById(R.id.btn_close); clickItem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { customDialog.dismiss(); // wright your Button Action } }); clickItem1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { customDialog.dismiss(); // wright your Button Action } }); clickItem2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { customDialog.dismiss(); // wright your Button Action } }); btnClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { customDialog.dismiss(); } }); customDialog.show(); }

Crear Linearlayout layout_width = "280dp" layout_height = "wrap_content" android: orientation = "vertical" nombre de archivo item_dialog_coustom_design.xml luego poner este código

<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Your Title" android:background="#000" android:textColor="#fff" android:padding="12dp" android:textSize="20sp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="1dp" android:background="#fff" android:padding="10dp" android:text="Your Item" android:id="@+id/item_click" android:textSize="16sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="1dp" android:background="#fff" android:padding="10dp" android:text="Your Item" android:id="@+id/item_click1" android:textSize="16sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="1dp" android:background="#fff" android:padding="10dp" android:text="Your Item" android:id="@+id/item_click2" android:textSize="16sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="10dp" android:paddingRight="10dp" android:paddingBottom="10dp" android:background="#fff" android:gravity="right"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btn_close" android:text="Close"/> </LinearLayout>