Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo puedo reemplazar mi código popupmenu con la lista popupwindow?

Actualmente, estoy programando la creación de un popupmenu que muestra una lista de pisos y un título. Sin embargo, el cambio del color de fondo de apenas el título y agregar un botón cercano al título está dando vuelta para ser una pesadilla.

Quiero reemplazar este popupmenu con una ventana emergente de lista para que pueda agregar un archivo XML con el atributo de fondo para el título con un color negro como el fondo y un botón de cierre en el fondo derecho y blanco para los elementos en el menú. ¿Hay una manera que puedo lograr esto con la ventana emergente de la 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(); } 

  • PopupWindow en una coordenada específica sin vista de anclaje
  • Diálogos y ventanas emergentes en Android
  • EditText en una ventana emergente
  • Popupwindow con la imagen
  • Android - PopupWindow sobre una vista específica
  • Desenfoque o fondo oscuro cuando Android PopupWindow está activo
  • ¿Cómo mostrar PopupWindow en una ubicación especial?
  • Crear correctamente un fragmento en un PopupWindow
  • 2 Solutions collect form web for “¿Cómo puedo reemplazar mi código popupmenu con la lista popupwindow?”

    Aquí está mi ejemplo para crear show un ListPopupWindow

    Primero , cree la disposición 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, crear un Adapter para su 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, crear 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(); } 

    Por último, puede mostrar ListPopupWindow

     showListPopupWindow(v); 

    Por ejemplo, si desea mostrarlo al hacer clic en el botón

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

    Introduzca aquí la descripción de la imagen

    Demostración completa está aquí

    Por favor, pruebe este código, tal vez 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> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.