PopupWindow – no funciona en algunos dispositivos

Uso código siguiente para mostrar un pequeño popup:

public static PopupWindow showImportMenu(Activity activity, View anchor, PopupWindowClickListener onClickListener) { LayoutInflater inflater = LayoutInflater.from(activity); PopupImportBinding binding = DataBindingUtil.inflate(inflater, R.layout.popup_import, null, false); if (!RootTools.isRootAvailable()) binding.llImportRootMethod.setVisibility(View.GONE); PopupWindow popupWindow = new PopupWindow(activity, null, R.attr.popupMenuStyle); popupWindow.setFocusable(true); popupWindow.setContentView(binding.getRoot()); popupWindow.setOutsideTouchable(true); PopupWindowCompat.showAsDropDown(popupWindow, anchor, 0, 0, Gravity.BOTTOM); View.OnClickListener clickListener = new View.OnClickListener() { @Override public void onClick(View view) { onClickListener.onClick(popupWindow, view); } }; binding.llImportDefault.setOnClickListener(clickListener); binding.llImportRootMethod.setOnClickListener(clickListener); binding.llImportHTCFromContacts.setOnClickListener(clickListener); binding.llImportManual.setOnClickListener(clickListener); return popupWindow; } 

Esto funciona en una gran cantidad de dispositivos, pero en algunos dispositivos raros no funciona, como:

  • Android 5.1.1 root slim rom
  • Quizás otros … hasta ahora, no sé más sobre otros dispositivos

Me dieron la retroalimentación de que no aparece ninguna ventana emergente. ¿Alguien sabe por qué esto no está funcionando en el dispositivo mencionado anteriormente? ¿Y qué puedo hacer para que funcione en este dispositivo también?

EDITAR

Parece que no está claro que lo que quiero es seguir:

  • showAsDropDown no showAtLocation o similar, nunca vi este problema con showAtLocation todavía
  • Mi solución está trabajando en casi todos los dispositivos, parece ser un teléfono / rom problema específico, tal vez ni siquiera solucionable, ya que podría ser un error en el dispositivo también => si alguien sabe de un error, diciéndome que sería bien también
  • No quiero usar un diálogo (o cualquier otra cosa) en su lugar, que no está respondiendo a mi pregunta. Actualmente utilizo un BottomSheet que está bien para mí, pero todavía me gustaría saber si el problema puede ser resuelto y de alguna manera manejado

Introduzca aquí la descripción de la imagen

Pruebe QuickAction

Actividad (EjemploActividad1.java) para mostrar cómo usar QuickAction:

 public class Example1Activity extends Activity { private static final int ID_ADD = 1; private static final int ID_ACCEPT = 2; private static final int ID_UPLOAD = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.example1); ActionItem addItem = new ActionItem(ID_ADD, "Add", getResources().getDrawable(R.drawable.ic_add)); ActionItem acceptItem = new ActionItem(ID_ACCEPT, "Accept", getResources().getDrawable(R.drawable.ic_accept)); ActionItem uploadItem = new ActionItem(ID_UPLOAD, "Upload", getResources().getDrawable(R.drawable.ic_up)); //use setSticky(true) to disable QuickAction dialog being dismissed after an item is clicked uploadItem.setSticky(true); final QuickAction mQuickAction = new QuickAction(this); mQuickAction.addActionItem(addItem); mQuickAction.addActionItem(acceptItem); mQuickAction.addActionItem(uploadItem); //setup the action item click listener mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() { @Override public void onItemClick(QuickAction quickAction, int pos, int actionId) { ActionItem actionItem = quickAction.getActionItem(pos); if (actionId == ID_ADD) { Toast.makeText(getApplicationContext(), "Add item selected", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), actionItem.getTitle() + " selected", Toast.LENGTH_SHORT).show(); } } }); mQuickAction.setOnDismissListener(new QuickAction.OnDismissListener() { @Override public void onDismiss() { Toast.makeText(getApplicationContext(), "Ups..dismissed", Toast.LENGTH_SHORT).show(); } }); Button btn1 = (Button) this.findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mQuickAction.show(v); } }) Button btn2 = (Button) this.findViewById(R.id.btn2); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mQuickAction.show(v); mQuickAction.setAnimStyle(QuickAction.ANIM_GROW_FROM_CENTER); } }); } } 

Salida:

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen # # Ok i implementado popupwindow para la clasificación en mi fragmento de la ficha y he comprobado el trabajo bien una vez que intente esto

He utilizado en ese diseño personalizado para la ventana emergente

  final PopupWindow popupWindow = new PopupWindow(getActivity()); LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.popmenu1t1, null); l8[![enter image description here][1]][1] = (LinearLayout) view.findViewById(R.id.atoz); l8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { date_sort="0"; discount_sort=""; price_sort=""; alpha_sort=""; popupWindow.dismiss(); } }); int width = 900; int height = 400; try { WindowManager wm = (WindowManager)view.getContext().getSystemService(Context.WINDOW_SERVICE); width = wm.getDefaultDisplay().getWidth(); height = wm.getDefaultDisplay().getHeight(); } catch (Exception e) { e.printStackTrace(); } popupWindow.setWidth(width*3/6); popupWindow.setFocusable(true); popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); popupWindow.setContentView(view); popupWindow.setBackgroundDrawable(null); popupWindow.setOutsideTouchable(true); popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0); 

Encuentra la siguiente ventana de popupwindow de pantalla adjunta en mi aplicación

Había creado un cuadro de diálogo emergente personalizado que aparece en la parte inferior de la pantalla

 public class MoreOptionDialog { private Dialog dialog; private Context context; private int size; public MoreOptionDialog(Context context) { this.context = context; } public void showMoreOptionDialog(List<String> listMoreOption) { dialog = new Dialog(new ContextThemeWrapper(context, R.style.DialogSlideAnim)); dialog.getWindow().setWindowAnimations(R.style.DialogSlideAnim); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); View view = View.inflate(context, R.layout.dialog_more_option, null); dialog.setContentView(view, new LinearLayout.LayoutParams(utility.getScreenWidth() - 100, size)); dialog.getWindow().setGravity(Gravity.BOTTOM); ListView listView = (ListView) view.findViewById(R.id.lvMoreOption); MoreOptionAdapter moreOptionAdapter = new MoreOptionAdapter(context, listMoreOption, Gravity.CENTER); listView.setAdapter(moreOptionAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { dialog.dismiss(); } }); dialog.show(); } } 

Y el estilo está aquí

 <style name="DialogSlideAnim"> <item name="android:windowAnimationStyle">@style/DialogAnimation</item> <item name="android:windowBackground">@color/color_white</item> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item> </style> 

Y este diálogo funciona en todos los dispositivos 🙂

Algunas ROMs restringen el uso de popupview con sus propios permisos . Así que el usuario tiene que activar explícitamente el permiso para mostrar las vistas emergentes.

Incluso MIUI limitará popupview para que se muestre de forma predeterminada.

Por favor, eche un vistazo si hay algún permiso en esa ROM o dispositivos.

  • Problemas al crear una ventana emergente en la actividad de Android
  • PopupWindow está por encima de la barra de estado en algún dispositivo
  • Android PopupWindow showAsDropDown () no funciona correctamente
  • La actividad de diálogo se oculta bajo la pantalla de llamada cuando el bloqueo seguro está activado, android
  • Cómo establecer el ancho de la ListView en un PopupWindow en Android?
  • EditText en PopupWindow que no muestra el teclado aunque setFocusable (true)
  • Orden de PopupWindow z
  • Cómo mostrar un ListFragment existente en un DialogFragment
  • PopupWindow de Android / Diálogo
  • Popupwindow: ShowAsDropDown como superior derecha en lugar de inferior izquierda?
  • SurfaceView no funciona dentro de PopupWindow
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.