In den meisten Beispielen werden die Breite und Höhe des Popup-Fensters genau angegeben. Ich möchte, dass sie WRAP_CONTENT sind - da der Inhalt dinamisch bestimmt wird, also setze ich im Konstruktor -2 für Breite und Höhe und zeige es über showAsDropDown(Ansicht Anker)
Auf diese Weise wird das Popup immer unterhalb der Ankeransicht gezeichnet, was bedeutet, dass es außerhalb des Bildschirms gezeichnet werden kann. Das folgende Snippet demonstriert das Problem. Versuchen Sie, auf die letzte TextView zu klicken, und Sie werden kein PopupWindow sehen, da es außerhalb der Windows-Grenzen angezeigt wird. Warum funktioniert es nicht? Ich bemerke, dass die explizite Angabe der Dimensionen (z.B. 200, 100) das Problem nicht auslöst. Versuchen Sie es selbst
package com.zybnet.example.popupdemo;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
public class PopupDemoActivity extends Activity implements OnClickListener {
private PopupWindow popup;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// -2 means WRAP_CONTENT THIS TRIGGERS THE PROBLEM
popup = new PopupWindow(getPopupContent(), -2, -2);
// When you specify the dimensions everything goes fine
//popup = new PopupWindow(getPopupContent(), 200, 100);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
// FILL_PARENT and same layout weight for all children
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-1, -1, 1);
for (int i = 0; i < 10; i++) {
TextView tv = new TextView(this);
tv.setText("Click to show popup");
tv.setOnClickListener(this);
layout.addView(tv, params);
}
setContentView(layout);
}
@Override
public void onClick(View view) {
popup.dismiss();
popup.showAsDropDown(view);
}
private View getPopupContent() {
TextView popupContent = new TextView(this);
popupContent.setText("Some text here");
popupContent.setTextColor(Color.parseColor("#5000ae"));
popupContent.setBackgroundColor(Color.parseColor("#ff00ff"));
popupContent.setPadding(10, 20, 20, 10);
return popupContent;
}
}