Mise en page Android et redimensionnement automatique des images
Mon application android dispose actuellement de deux mises en page pour son écran de démarrage, portrait et paysage. Les deux utilisent le même format simple - une image de la même taille que l'écran, dans l'un linéaire simple mise en page:
<?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>
L'image utilisée est 320w x 480 h et Android automatiquement redimensionnée à la taille de l'écran, quelle que soit la taille de l'écran de l'appareil. Évidemment, l'image n'est pas aussi forte lorsqu'il est redimensionné pour une tablette par exemple.
Je précise que mon but est de réduire la taille installée de l'application finale, autant que possible, et je suis conscient que je pourrais inclure les différents types de mises en page et la taille des mêmes images différentes pour chaque taille d'écran.
Mon écran de démarrage est composé du nom de l'application dans le tiers supérieur de l'écran, puis une image dans les deux tiers inférieurs de l'écran. Afin d'économiser de la mémoire, je tiens à recadrer le nom de l'application et de l'image en deux images séparées, et puis de les afficher dans un linéaire de la mise en page verticale pour les appareils tenu en mode portrait. Je vais ensuite utiliser un linéaire de la mise en page horizontale de l'image et nom de l'application pour le mode paysage.
Pour la disposition de portrait, j'ai obtenu ceci:
<?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>
Quand je l'affiche ci-dessus dans eclipse, il semble ok pour les téléphones intelligents, mais les images ne sont pas redimensionnées lors de l'affichage sur une tablette, même si je suis en utilisant le android:scaleType="fitCenter" argument. J'ai essayé d'utiliser les trempettes au lieu de fill_parent dans l'imageview layout_width et layout_height mais cela ne fonctionne pas non plus.
Ce que je fais mal? Est-il une autre façon de le faire?
Grâce
J'ai édité la question d'inclure cette nouvelle version du XML basé sur @KaHa6u 's ci-dessous. Alors maintenant, j'ai:
<?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>
Qui s'adapte à la verticale, mais pas horizontalement, donc je me retrouve avec grand mince images lorsque la taille de l'écran augmente.
source d'informationauteur basinbasin | 2011-07-26
Vous devez vous connecter pour publier un commentaire.
@basinbasin
Je viens de rencontré une situation très similaire à celle que vous avez expliqué. J'ai besoin d'avoir une ImageView sur le haut de la disposition, qui devait être étirée HORIZONTALEMENT et de conserver sa hauteur lorsque le téléphone est en mode paysage. J'ai réussi avec juste ce:
et, bien sûr, avec l'activité de l'attribut:
Espère que cette aide. Merci.
La fitCenter scaleType maintient le ratio d'aspect original. Avez-vous essayé le fitXY scaleType? La matrice.ScaleToFit Documentation
Avez-vous essayé "fill_parent" comme android:layout_height et android:layout_width valeurs de l'ImageView vous voulez tendu?
Je suppose que le "wrap_content" paramètre ne laissez pas le système de savoir les limites de ce qui pour redimensionner l'image. S'il vous plaît essayer et laissez-moi savoir les résultats.