2011-07-26 14 views
11

Mi aplicación para Android actualmente tiene dos diseños para su pantalla de inicio, retrato y paisaje. Ambos utilizan el mismo formato simple - una imagen que es del mismo tamaño que la pantalla, que se celebró en un sencillo diseño lineal:Disposición de Android y cambio automático de tamaño de la imagen

<?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" 
    > 
<ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:scaleType="fitCenter" 
     android:src="@drawable/splash_p" 
     /> 
</LinearLayout> 

La imagen utilizada es de 320 W x 480h y Android cambia de tamaño automáticamente para ajustarse a la pantalla, independientemente de el tamaño de pantalla del dispositivo. Obviamente, la imagen no es tan nítida cuando se cambia el tamaño de una tableta, por ejemplo.

Debo señalar aquí que mi objetivo es reducir el tamaño de la aplicación final tanto como sea posible, y soy consciente de que podría incluir diferentes diseños y tamaños de las mismas imágenes para cada tamaño de pantalla diferente.

Mi pantalla de presentación se compone del nombre de la aplicación en el tercio superior de la pantalla y luego una imagen en los dos tercios inferiores de la pantalla. Para ahorrar memoria, quiero recortar el nombre de la aplicación y la imagen en dos imágenes separadas, y luego mostrarlas en un diseño vertical vertical para dispositivos sostenidos en modo retrato. Luego usaré un diseño horizontal lineal de la imagen y luego el nombre de la aplicación para el modo horizontal.

Para el diseño vertical Tengo esto:

 <?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> 
     <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent"   android:layout_height="wrap_content" android:orientation="vertical"> 
     <View android:layout_height="45dp" android:layout_width="45dp" /> 
     <ImageView android:layout_height="fill_parent" 
     android:src="@drawable/splashtext" 
     android:scaleType="fitCenter" 
     android:layout_gravity="center" 
     android:layout_width="fill_parent"></ImageView> 

     <View 
     android:layout_height="35dp" 
     android:layout_width="35dp" />  

     <ImageView 
     android:scaleType="fitCenter" 
     android:src="@drawable/splashpic" 
     android:layout_height="fill_parent" android:scaleType="fitCenter" android:layout_width="fill_parent" android:layout_gravity="center"/> 
</LinearLayout> 
</LinearLayout> 

Cuando muestro lo anterior en eclipse, se ve bien para los teléfonos inteligentes, pero las imágenes no se escalan hasta cuando se muestra en una tableta, aunque Estoy usando el argumento android: scaleType = "fitCenter". He intentado usar inmersiones en lugar de fill_parent en la vista de la imagen layout_width y layout_height, pero eso tampoco funciona.

¿Qué estoy haciendo mal? Hay otra manera de hacer esto?

Gracias

He editado la cuestión de incluir este XML revisado basado en ayuda @ KaHa6u 's abajo. Así que ahora tengo:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <LinearLayout android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
<View 
     android:layout_height="15dp" 
     android:layout_width="15dp" 
/> 
<ImageView android:layout_height="wrap_content" 
     android:src="@drawable/splashtext" 
     android:adjustViewBounds="true" 
     android:scaleType="fitXY" 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_weight="1"> 
     </ImageView> 


<View 
     android:layout_height="15dp" 
     android:layout_width="15dp" 
/> 
<ImageView 
     android:scaleType="fitXY" 
     android:src="@drawable/splashpic" 
     android:adjustViewBounds="false" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_weight="4" 
     android:layout_gravity="center"/> 
</LinearLayout> 
</LinearLayout> 

que escala verticalmente, pero no horizontalmente, por lo que termino con imágenes altos y delgados cuando el tamaño de la pantalla aumenta el.

Respuesta

13

@basinbasin

acabo encontrado una situación muy similar a la que usted explicó. Necesitaba tener un ImageView en la parte superior del diseño, que se tenía que estirar SOLAMENTE HORIZONTALMENTE y mantener su altura cuando el teléfono entra en la orientación horizontal. Tuve éxito con sólo esto:

<ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/main_header" 
    android:scaleType="fitXY" 
/> 

y, por supuesto, con el atributo de la actividad:

<activity android:configChanges="keyboardHidden|orientation"> 

Espero que esto ayude. Gracias.

1

El scaleType de fitCenter mantiene la relación de aspecto original. ¿Has probado el fitXY scaleType? Matrix.ScaleToFit Documentation

+0

Gracias por este @ KaHa6uc.Lo cambié a fitXY y también he usado adjustViewBounds. Ahora la pantalla se escala verticalmente, pero no horizontalmente. He editado mi pregunta para incluir el diseño revisado. ¿Alguna más ideas a nadie? – basinbasin

0

¿Has probado "fill_parent" como los valores de android: layout_height y android: layout_width para el ImageView que quieres estirar? Supongo que el ajuste "wrap_content" no le permite al sistema conocer los límites para cambiar el tamaño de la imagen. Por favor, inténtalo y cuéntame los resultados.

+0

Gracias de nuevo @ KaHa6uc, usando fill_parent fue mejor. También experimenté con relacionamientos relativos y uso de relleno para poder ajustar la imagen de texto en la parte superior de la pantalla encima de la imagen. Para ser honesto, me he dado por vencido ahora. No pude obtener la imagen de texto para que se muestre correctamente en las pantallas más grandes, y hey, es solo una pantalla de bienvenida. Tomar demasiado tiempo y esfuerzo para algo en lo que la mayoría de los usuarios harán clic para descartarlo. – basinbasin

Cuestiones relacionadas