La maggior parte degli esempi là fuori specifica esattamente la larghezza e l'altezza della finestra popup. Voglio che siano wrap_content - dal momento che il contenuto è dinamicamente determinato, così nel costruttore ho impostato -2 sia per la larghezza e l'altezza e lo dimostrano tramite showAsDropDown (Vedi ancoraggio)PopupWindow fuori schermo quando la dimensione non è specificata
In questo modo, il popup viene sempre disegnata sotto la vista di ancoraggio, il che significa che può essere disegnato fuori dallo schermo. Il seguente frammento illustra il problema. Prova a fare clic sull'ultima TextView e non vedrai nessuna finestra popup, poiché è mostrata al di fuori dei limiti di Windows. Perché non funziona? Osservo che specificare la dimensione in modo esplicito (ad esempio 200, 100) non attiva il problema. Provate voi stessi
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;
}
}
ho letto le fonti troppo, e sembra più un a bug ndroid, poiché la dimensione è corretta, ma il posizionamento è sbagliato. Puoi testarlo da solo, dal momento che ho fornito una demo. Ora sto sperimentando con PopupWindow.showAtLocation() – Raffaele
Proprio come sospettavo che avessi bisogno di aggiungere in 'setWindowLayoutMode' ho modificato la mia risposta e aggiunto nel codice esatto di lavoro che ti serve. L'ho provato sul mio dispositivo Android e tutto! :) – Bob
Cosa succede se la prossima volta che invochi il popup cambia la visualizzazione del contenuto? Ecco perché ho bisogno di WRAP_CONTENT – Raffaele