2012-01-19 24 views
8

Estoy tratando de centrar la vista para diferentes resoluciones utilizando el diseño y las propiedades de gravedad, pero no está funcionando. ¿Hay alguna manera de hacer que el centro de vistas personalizado se coloque horizontalmente en diferentes resoluciones?¿Cómo centrar una vista personalizada en Android?

¿Tengo que hacer algo en el método onMeasure?

Aquí es una de las cosas que estoy tratando en este momento, la vista es a la izquierda del centro ..

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <RelativeLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="50dp" 
     android:gravity="center_horizontal"> 

     <com.application.app.ui.CustomView 
      android:id="@+id/ivCoinAnimation" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true"/> 


    </RelativeLayout> 


</FrameLayout> 
+0

¿Puede proporcionar un pequeño ejemplo de lo que ha intentado? Debería ser posible centrar la vista con algunos LinearLayouts anidados y el atributo de gravedad. – henrik

+0

Agregué un ejemplo de una de las cosas que probé – tresnotas

Respuesta

1

Asumiendo que tienen una View dentro de un diseño como FrameLayout, establecería View ' s layout_gravity a center. ¡No lo confundas con gravity!

Además, puede ser necesario anular onMeasure(). Lea it's documentation para decidir si necesita anularlo. Si lo hace, tenga en cuenta que los parámetros están codificados con View.MeasureSpec.

-1

Aquí hay un ejemplo de cómo centrar dos botones en la pantalla. Esto también debería funcionar con su CustomView.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical"> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal"> 

     <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 
     <Button android:text="Button" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 

    </LinearLayout> 
</LinearLayout> 
0

Debe implementar en su aduana vista de clase

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 


En ella se debe calcular la altura y la anchura de su encargo Vista. Si necesita el centro de su encargo Ver en la disposición de los padres - Asegúrese de que:

  • encargo Ver height = matriz Ver altura

Y/O

  • encargo Ver ancho! ! = padre Ancho de vista


Por ejemplo:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     final int height = mCircleRadius * 2; //calculated 
     final int width = getMeasuredWidth(); //parent width 

     setMeasuredDimension(width, height); 
    } 


Ahora puede utilizar para su próximo encargo Vista:

android:layout_centerHorizontal="true" 
android:layout_centerVertical="true" 

enter image description here

P. S. Verá que android:layout_centerHorizontal="true" no tiene ningún efecto. El motivo es usar ancho de padre en en la medida en lugar de calcular el ancho exacto.

Cuestiones relacionadas