10 Stimmen

Popup-Fenstergröße in Android

Ich erstelle ein Popup-Fenster in einer Listactivity im Ereignis onListItemClick.

LayoutInflater inflater = (LayoutInflater)
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View pop = inflater.inflate(R.layout.popupcontact, null, false);
ImageView atnot = (ImageView)pop.findViewById(R.id.aNot);
height = pop.getMeasuredHeight();
width = pop.getMeasuredWidth();
Log.e("pw","height: "+String.valueOf(height)+", width: "+String.valueOf(width));
atnot.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        pw.dismiss();
    }
});

 pw = new PopupWindow(pop, width, height, true);

 // The code below assumes that the root container has an id called 'main'
 //pw.showAtLocation(v, Gravity.CENTER, 0, 0); 
 pw.showAsDropDown(v, 10, 5);

Die Variablen für Höhe und Breite sollten die Höhe und Breite des Layouts sein, das für das Popup-Fenster (popupcontact) verwendet wird. Aber sie geben 0 zurück. Ich vermute, das liegt daran, dass das Layout noch nicht gerendert ist. Hat jemand einen Tipp, wie ich die Größe des Popup-Fensters steuern kann, ohne absolute Pixelzahlen verwenden zu müssen?

44voto

Yann Punkte 3561

Ich hatte ein ähnliches Problem. Ich habe es durch einen Anruf gelöst:

pop.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);

bevor die Größe des Layouts mit getMeasuredHeight() und getMeasuredWidth() ermittelt wird

2voto

YK Tan Punkte 316

Ich glaube nicht, dass Ihr Code funktionieren wird, weil Sie versuchen, die Breite und Höhe der Ansicht zu erhalten, die ein Kind Ihres Popup-Fensters ist.

Da Sie das Popup-Fenster in der "v"-Ansicht verankern, sollten Sie vielleicht die Breite und Höhe entsprechend der Ankeransicht (oder in einem darauf basierenden Verhältnis) festlegen?

1voto

Janusz Punkte 181894

Wenn Sie ein Popup-Fenster erstellen möchten, schauen Sie sich die Dialoge erstellen . Wenn Sie eine komplette eigene Ansicht in Ihrem Dialog verwenden möchten, sehen Sie sich dies an Frage Lesen Sie unbedingt die Kommentare zu der akzeptierten Antwort. Ich denke, es gibt keine Notwendigkeit, PopupWindow selbst zu verwenden, um diese Ansicht zu erstellen, und das Dialogmaterial wird Sie viel einfacher zu einem Ergebnis bringen.

Wenn Sie das PopupWindow beibehalten wollen und die Breite und Höhe des Fensters nicht ändern wollen, verwenden Sie einfach ein anderes Konstrukteur für PopupWindow gibt es einige, die keine Höhe und Breite benötigen. Sie nehmen keinen Booleschen Wert für die Fähigkeit, das Fenster zu fokussieren, aber es scheint, dass man dies später über setFocusable() .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X