Android PopupWindow et WRAP_CONTENT ne fonctionnent pas ensemble

J'ouvre une fenêtre popu comme ceci:

mInfoPopup = new PopupWindow(layout, 400, 600, true); mInfoPopup.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

La fenêtre obtient alors la taille exacte spécifiée (400×600) et ne règle PAS sa taille sur son contenu. Que dois-je changer pour que la fenêtre contextuelle enveloppe son contenu?

  • Fil de thread principal d'Android thread WebView
  • Est-il possible d'installer Android Studio sur ChromeBook?
  • Ajouter une case "Se souvenir de moi"
  • Comment vérifier le nom de domaine donné http ou https dans java?
  • Le répertoire drawable Android peut-il contenir des sous-répertoires?
  • Android Listview ralentit la vitesse de défilement
  • 8 Solutions collect form web for “Android PopupWindow et WRAP_CONTENT ne fonctionnent pas ensemble”

    Il suffit de changer la façon dont vous le créez en:

     PopupWindow popupMenu = new PopupWindow(layout, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); 

    J'ai trouvé une solution qui fonctionne pour moi (je travaille avec API 10), vous pouvez l'utiliser:

     popupWindow.setWindowLayoutMode( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setHeight(1); popupWindow.setWidth(1); 

    Si vous ne définissez pas la hauteur / la largeur ou le réglage 0, cela ne fonctionnera pas. Exemple:

     ... private Button button; protected void onCreate(Bundle savedInstanceState) { ... attached_button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { LayoutInflater layoutInflater = (LayoutInflater) getBaseContext() .getSystemService(LAYOUT_INFLATER_SERVICE); View popupView = layoutInflater.inflate(R.layout.popup_layout, null); final PopupWindow popupWindow = new PopupWindow(getApplicationContext()); popupWindow.setContentView(popupView); popupWindow.setWindowLayoutMode( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setHeight(1); popupWindow.setWidth(1); popupWindow.setFocusable(true); Button dismiss = (Button) popupView .findViewById(R.id.dismiss); dismiss.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); } }); popupWindow.showAsDropDown(button); } }); 

    J'espère vous aider.

    Le code suivant a fonctionné pour moi.

     LayoutInflater layoutInflater = LayoutInflater.from(context); View layout = layoutInflater.inflate(R.layout.popup_layout, null); PopupWindow popup = new PopupWindow(context); popup.setContentView(layout); popup.setWidth(ListPopupWindow.WRAP_CONTENT); popup.setHeight(ListPopupWindow.WRAP_CONTENT); 

    Ici, utilisé popup.setWidth(ListPopupWindow.WRAP_CONTENT) instead of popup.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT) dans mon cas.

     PopupWindow popupWin = new PopupWindow(mContext); // WRAP_CONTENT works well for height, but not for width. popupWin .setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); // Measure layout here, then we can get measureHeight. layout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); popupWin .setWidth(layout.getMeasuredWidth()); popupWin .setContentView(layout); popupWin .showAsDropDown(anchorView,0 ,0, Gravity.NO_GRAVITY); 
      final PopupWindow newPartWindow = new PopupWindow(newPartIconView, 1, 1, false); newPartWindow.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

    Cela a fonctionné pour moi, nous avons besoin de la largeur / hauteur à initialiser à 1 pour que le contenu de l'enveloppement fonctionne.

    N'utilisez pas RelativeLayout dans la mise en page, remplacez LinearLayout, peut-être qu'elle fonctionne.

     popview = LayoutInflater.from(context).inflate(R.layout.pop_citypicker, null); popwindow = new PopupWindow(popview, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

    J'ai eu un problème similaire, mais même la taille dans New PopupWindow (…) ne fonctionnait pas.

    J'ai eu une image en arrière-plan de la fenêtre contextuelle et j'ai résolu de la mettre en arrière-plan de la mise en page (j'utilise le nouveau ConstraintLayout) avec android: background. L'image est une image de 9 patch, afin de redimensionner de manière agréable.

    Le code ci-dessous est utilisé pour réduire la largeur de la disposition et la fenêtre pop-up de hauteur

    Et j'ai utilisé cette mise en page personnalisée avec un centre aligné

      final PopupWindow popupWindow = new PopupWindow(getActivity()); PopupMenu popup = new PopupMenu(getActivity(), v, Gravity.CENTER); LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.popmenu1t1, null); l1 = (LinearLayout) view.findViewById(R.id.atoz); l2 = (LinearLayout) view.findViewById(R.id.ztoa); l3 = (LinearLayout) view.findViewById(R.id.phtol); l4 = (LinearLayout) view.findViewById(R.id.pltoh); l5 = (LinearLayout) view.findViewById(R.id.dhtol); l6 = (LinearLayout) view.findViewById(R.id.dltoh); l7 = (LinearLayout) view.findViewById(R.id.dotor); l8 = (LinearLayout) view.findViewById(R.id.drtoo); 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.setHeight(height*3/8); popupWindow.setFocusable(true); popupWindow.setContentView(view); popupWindow.setBackgroundDrawable(null); popupWindow.setOutsideTouchable(true); popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0); 

    Ces deux lignes n'utilisent pas plein pour l'instant

     popupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT); popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); 

    Happy coding friends ..

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.