2012-07-27 17 views
22

im tratando de possition mi botón no exactamente en el centro, pero digamos que en el 2/5s de la altura de la pantalla, que estaba buscando atributo sin éxito, por lo que he intentado este enfoque¿Hay alguna forma de compensar una vista desde el centro en Android?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/background" 
android:padding="20dp" > 

<ImageButton 
    android:id="@+id/flashlight_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_above="@+id/fakeView" 
    android:background="@null" 
    android:contentDescription="@string/flashlight_button_description" 
    android:src="@drawable/freeml_bright" /> 

    <View 
    android:id="@+id/fakeView" 
    android:layout_width="10dp" 
    android:layout_height="10dp" 
    android:layout_centerInParent="true" 
    android:background="#FFAABB" /> 

</RelativeLayout> 

sin embargo, no funciona , incluso si configuro un margen en la vista falsa.

¿Alguna idea?

// // EDITAR

gracias por te responde chicos, funciona atributo de relleno, sin embargo, ya que es una imagen grande y si quiero que empiece a 2/5ths de altura de la pantalla, que cubre el punto central de pantalla, así que si uso el atributo de relleno, funciona, pero lo aleja del centro y no permite que lo cubra. Lo siento mal

Sin embargo, lo hice funcionar usando el diseño lineal, que quería evitar porque hay más vista en la parte superior e inferior uno al lado del otro por lo que daría lugar a vistas anidadas mediante el diseño lineal. Desafortunadamente, creo que es la única opción.

Básicamente se utiliza otra disposición lineal que llena el espacio restante no se utiliza por vistas superior e inferior con la altura = 0DP y peso = 1 y establece su gravedad para centrar

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

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:gravity="center" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:contentDescription="@string/application_logo_description" 
     android:src="@drawable/mylight" /> 

    <ImageButton 
     android:id="@+id/settings_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:background="@null" 
     android:contentDescription="@string/settings_button_description" 
     android:src="@drawable/settings_button" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <ImageButton 
     android:id="@+id/flashlight_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@null" 
     android:contentDescription="@string/flashlight_button_description" 
     android:src="@drawable/flashlight_button_selector" /> 

    <View 
     android:id="@+id/fakeView" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_marginTop="60dp" 
     android:background="#FFAABB" /> 
</LinearLayout> 

<ImageView 
    android:id="@+id/imageView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|center_horizontal" 
    android:contentDescription="@string/powered_by_description" 
    android:src="@drawable/powered_by" /> 

<ImageButton 
    android:id="@+id/ad_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|center_horizontal" 
    android:background="@null" 
    android:contentDescription="@string/ad_button_description" 
    android:src="@drawable/freeml" /> 

</LinearLayout> 

Gracias por su entrada.

Respuesta

3

No utilice margen, el uso de relleno (arriba), así:

<View 
android:id="@+id/fakeView" 
android:layout_width="10dp" 
android:layout_height="10dp" 
android:layout_centerInParent="true" 
android:paddingTop="80dp" 
android:background="#FFAABB" /> 

que debería funcionar, aunque no lo he probado!

+0

Hola, funciona, sin embargo, como yo, lo hubiera engañar usted, pd es una imagen bastante grande en el ImageButton, por lo que si quiero para que comience en 2/5s de la altura de la pantalla, por lo tanto, cubre el punto central de la pantalla. SI uso su respuesta sugerida, presiona el botón desde el centro y no permite que lo cubra. – urSus

+0

Hmm, tal vez intente reemplazar paddingTop con paddingBottom? –

+0

Oh, de hecho, lo leí mal, no funciona el ajuste de relleno en la vista falsa centrada. Establecer el relleno en el botón de arriba simplemente empuja el botón hacia arriba, lo cual no es la solución para mí, ya que quiero que cubra el punto medio – urSus

3

trate de usar Android atributo: layout_toLeftOf = "@ +/Identificación del fakeView"

+0

+1 ¡Esto es fantástico! –

32

dependiendo del tamaño de la pantalla del dispositivo de destino, el relleno por X dp podría moverlo más que sólo una quinta parte de la altura.

es posible que tenga que codificar este movimiento usted mismo.

pero por otra parte, nada le impide hacer

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/background" 
android:padding="20dp" > 

<View 
android:id="@+id/fakeView" 
android:layout_width="10dp" 
android:layout_height="10dp" 
android:layout_centerInParent="true" 
android:background="#FFAABB" /> 

<ImageButton 
android:id="@+id/flashlight_button" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerHorizontal="true" 
android:layout_above="@+id/fakeView" 
android:marginBottom="50dp" 
android:background="@null" 
android:contentDescription="@string/flashlight_button_description" 
android:src="@drawable/freeml_bright" /> 

+0

+1 Funciona muy bien. –

+0

Gracias amable señor :) – Shark

+5

¡Una vista falsa en el medio! ¡Eso es pensar fuera de la caja, justo lo que necesitaba! :) –

Cuestiones relacionadas