J'ai un peu de ImageViews à l'intérieur d'un LinearLayout. J'ai besoin de réduire l'échelle de l'ImageViews de manière à maintenir leurs ratios d'aspect tout en s'insérant à l'intérieur de la LinearLayout verticalement. Horizontalement, j'ai juste besoin d'eux pour être adjacents les uns aux autres.
J'ai fait une simplification de banc d'essai pour ce qui les nids pondérée des Mises en page afin que j'ai une grande, mais pas très haut, LinearLayout pour la ImageViews -
<?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">
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5">
<LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
<ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
<ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
(Dans l'Eclipse de mise en page de l'éditeur les images sont coupées verticalement et non mis à l'échelle à tous - mais c'est juste un de ces particularités que nous apprenons à l'aimer)
Lors d'une exécution sur le matériel, les images sont redimensionnées à la bonne hauteur, tout en conservant leur aspect ratio. Mon problème, c'est qu'ils ne sont pas à côté les uns des autres. La hauteur de chaque ImageView correspond bien à la hauteur de la LinearLayout. La largeur de chaque ImageView est la largeur de la non mis à l'échelle de l'image, à l'échelle les images qui apparaissent sur le côté gauche de leur ImageViews. De ce fait, je suis un grand écart entre les images.
Idéalement, je voudrais gérer cela via un fichier XML, si ce n'est pas possible, je comprends que l'utilisation d'un affichage personnalisé peut être la meilleure solution.
J'ai essayé de créer un IconView (s'étend ImageView) qui remplace onMeasure pour que je puisse créer une image vue de la taille nécessaire par la mise à l'échelle de la largeur en fonction de la hauteur. Mais le parentWidth et parentHeight être transmis à la fonction sont les dimensions de l'écran et pas de la LinearLayout conteneur.
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
// Calculations followed by calls to setMeasuredDimension, setLayoutParams
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Donc mes questions sont -
1) puis-je modifier le XML d'une certaine façon à lui faire faire ce dont j'ai besoin?
2) Comment puis-je faire de ma classe personnalisée obtenir la hauteur de la LinearLayout afin que je puisse calculer la largeur nécessaire pour les images personnalisées?
Merci si vous avez réussi à lire jusqu'ici. Encore plus merci si vous pouvez m'indiquer la direction de la une solution!