2010-09-07 13 views
9

quiero para determinar la altura y la anchura disponible de la disposición de los padres a los que tengo que añadir mi punto de vista.Android - Obtener el alto de la disposición de los padres

he utilizado muchos métodos en el diseño como

  • layout.getHeight()
  • layout.getRootView(). GetHeight()

Todos estos métodos devuelven 0 (cero) como el resultado.

Mi requisito principal es poder dar ancho a una vista que es un% del ancho del diseño.

también que no quiero usar la etiqueta para esto. Quiero hacerlo a través del código.

Gracias de antemano.

Respuesta

5

El problema aquí es que está tratando de obtener el alto/peso principal antes de que layoutmanager complete el diseño principal. Solo puede obtener las dimensiones principales una vez que se completa su diseño.

La forma recomendada de hacer lo que quiere lograr es mediante el uso del campo layout_weight de LayoutParams. link text

En particular, se debe utilizar:

LayoutParams lp = new LinearLayout.LayoutParams(width, height, 
weight); 

valor layout_weight puede ser cualquier cosa entre 0,0 a 1,0. Así, por ejemplo si tengo myButton dentro parentLayout, y quiero myButton para ocupar el 30% de la disposición de los padres ... Me gustaría utilizar algo como:

myButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
               LayoutParams.WRAP_CONTENT,0.3)); 

La suma de todos los elementos layout_weight niño debe ser 1. Además, layout_weight no se debe usar con el ancho o alto de la vista establecido en LayoutParams.FILL_PARENT.

+0

Pero ¿Cómo consigo la de la altura y la anchura de la disposición de los padres. ........... LayoutParams lp = new LinearLayout.LayoutParams (ancho, alto, peso); ......... Para dar altura en% este método solo es útil si tengo diseños y altura de padres. – Robin

+0

No, no necesita saber el ancho/alto exacto del elemento principal para usar este método. Puede especificar cualquier cosa entre 0 a 1 como un peso. Así que, por ejemplo, si tengo myButton dentro de parentLayout, y quiero que myButton ocupe el 30% del diseño principal ... Usaría algo como: –

+0

el espacio de comentarios lo siento no fue suficiente ... Edité mi respuesta anterior. –

7

Ok. Encontré una solución para eso. La forma en que podemos conseguir hieght de la pantalla de la actividad es

getApplicationContext(). GetResources(). GetDisplayMetrics(). HeightPixels

Pero todavía no sé cómo conseguir las Dimensiones en píxeles de la disposición de los padres?

+0

Esto no siempre es el mismo. Con getApplicationContext(). GetResources(). GetDisplayMetrics(). HeightPixels que están recibiendo la altura de la pantalla en píxeles. Si tiene (por ejemplo) una barra de acciones, esto también incluye la barra de acciones, algo que probablemente quiera evitar si quiere saber la altura en píxeles de un elemento de diseño o ui (fondo o lo que sea) – Sotti

2

Una alternativa para implementar mediante programación es utilizar siguiente método:

public void onWindowFocusChanged(boolean b) { ...} 

En el momento en que se invoca este método, el proceso de maquetación se ha terminado. Por lo tanto, puede obtener los atributos principales correctamente.

Como Ejemplo:

public class A extends Activity { 
    LinearLayout parent; 
    Button child; 
    public void onCreate(Bundle b) { 
     parent = (LinearLayout) findViewById(R.id.linear1); 
     child = (Button) findViewById(R.id.button1); 
     . 
     . 
    } 

@Override 
public void onWindowFocusChanged(boolean b) { 
     LayoutParams lpc = child.getLayoutParams(); 
     lpc.width = parent.getWidth(); 
     child.postInvalidate(); 
     . 
     . 
    } 
} 
0

En OnCreate() método, si se utiliza layout.getHeight() y layout.getWidth(), se devuelve 0, en lugar usted puede seguir esta:

public void onClick(View v) { 
    // TODO Auto-generated method stub 

      int layWidth = Layout.getLeft(); 
      int layHeight = Layout.getHeight(); 
     break;  
    } 
+0

Devuelve '0 'porque la interfaz de usuario no tiene el tiempo para mostrarse. Podría ser mejor usar un '' Runnable' dentro onCreate' o utilizar el método [ 'onWindowFocusChanged'] (http://developer.android.com/reference/android/view/View.html#onWindowFocusChanged%28boolean%29) en el interior la actividad como [Robeth] (http://stackoverflow.com/a/10269753/2668136) mencionada, en lugar de utilizar un oyente de clic para cambiar las vistas. – Fllo

3

intentar algo como esto:

view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     view.getHeight(); 
    } 
    }); 
0

Usted está llamando probobly getHeight() a principios. Asegúrese de llamar al getParent().getHeight() después de viewGroup.addView(view0) y/o setContentView(activity_main.xml). Esto me ha sucedido en el pasado y esto lo solucionó.

Cuestiones relacionadas