wake-up-neo.com

Android PopupWindow und WRAP_CONTENT arbeiten nicht zusammen

Ich öffne ein Popu-Fenster wie folgt:

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

Das Fenster erhält dann die genaue angegebene Größe (400x600) und passt seine Größe NICHT an den Inhalt an. Was muss ich ändern, damit das Popup-Fenster seinen Inhalt tatsächlich umgibt?

15
Boris

Sie haben einfach die Art und Weise geändert, wie Sie sie erstellen: 

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

Ich habe eine Lösung gefunden, die für mich funktioniert (ich arbeite mit API 10). Sie können sie verwenden:

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

Wenn Sie weder Höhe/Breite noch 0 einstellen, funktioniert dies nicht. Beispiel:

...
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);

        }
    });

Ich hoffe Dir zu helfen.

7
vgc
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);
6
Arst

Der folgende Code hat für mich funktioniert.

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);

Hier verwendet popup.setWidth(ListPopupWindow.WRAP_CONTENT) instead of popup.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT) in meinem Fall.

4
Krishna V

verwenden Sie RelativeLayout nicht im Layout, ersetzen Sie LinearLayout, vielleicht funktioniert es.

popview = LayoutInflater.from(context).inflate(R.layout.pop_citypicker, null);

popwindow = new PopupWindow(popview, ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.WRAP_CONTENT);
1
qinmiao

Der nachstehende Code steht für die Verringerung des Popup-Fensters für Breite und Höhe des Layouts

und ich habe in diesem benutzerdefinierten Layout mit ausgerichteter Mitte verwendet 

  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);

Diese beiden Zeilen sind im Moment nicht voll belegt

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

Glückliche Programmierfreunde ..

1
Venkatesh

Ich hatte ein ähnliches Problem, aber selbst das Einstellen der Größe in PopupWindow (...) funktionierte nicht. 

Ich hatte ein Bild als Hintergrund für das Popup und es wurde behoben, dieses als Hintergrund für das Layout (ich verwende das neue ConstraintLayout) mit Android: Hintergrund. Das Bild ist ein 9-Patch-Bild, so dass es auf eine nette Art und Weise angepasst wird.

0
Paolo Godino
 final PopupWindow newPartWindow = new PopupWindow(newPartIconView, 1, 1, false);
    newPartWindow.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

Dies funktionierte für mich, wir müssen die Breite/Höhe auf 1 initialisieren, damit der Wrap-Inhalt funktioniert.

0
IK828