2010-06-10 19 views
9

Estoy creando una ventana emergente en una lista de actividades en el evento onListItemClick.Tamaño de la ventana emergente en android

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

Ahora, la altura y la anchura de las variables se supone que la altura y la anchura de la disposición usada en la ventana emergente (popupcontact). Pero devuelven 0. Supongo que eso se debe a que el diseño aún no se ha renderizado. ¿Alguien tiene una pista, cómo puedo controlar el tamaño de la ventana emergente sin necesidad de utilizar números de píxeles absolutos?

Respuesta

2

No creo que su código funcione porque está tratando de obtener el ancho y alto de la vista que es un elemento secundario de su ventana emergente.

Dado que está anclando la ventana emergente a la vista "v", ¿puede establecer el ancho y el alto de acuerdo con la vista de anclaje (o en una proporción basada en ellos)?

1

Si desea crear una ventana emergente, eche un vistazo al Creating Dialogs. Si desea utilizar una vista propia en su diálogo, eche un vistazo a este question, asegúrese de leer los comentarios sobre la respuesta aceptada. Creo que no hay necesidad de usar PopupWindow usted mismo para crear esta vista y las cosas del diálogo le harán llegar a un resultado mucho más fácil.

Si desea permanecer con la ventana emergente y no desea cambiar el ancho y alto de su ventana simplemente use otra constructor para ventana emergente hay algunas disponibles que no necesitan alto ni ancho. No toman un booleano para poder enfocar la ventana, pero parece que puedes cambiar esto más tarde a través del setFocusable().

43

Tuve un problema similar. Lo resuelto llamando:

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

antes de obtener el tamaño del diseño con getMeasuredHeight() y getMeasuredWidth()

+2

Am también se enfrenta a la misma cuestión. Esto funciona, pero dando menos altura que el código original – vignesh

+1

me da una excepción de puntero nulo. – Amrut

Cuestiones relacionadas