2010-08-30 5 views
2

Été bloqué sur cela pendant des jours, les choses ne fonctionnent tout simplement pas avec la façon dont je configure cela. J'ai une grande grille d'ImageViews qui sont toutes de la même taille. Il est composé d'un LinearLayout Horizontal et de 5 LinearLayouts Vertical (première image). Ce que je veux (et je m'en fous, que ce soit en utilisant RelativeLayout, Linear ou Tables) est si je devais définir l'image # 2 à une image plus grande (en particulier 3x3 des plus petites) Je le veux pour «écraser» efficacement ces images (comme le montre l'image 2).Android Linéaire/RelativeLayout dimensionnement avec ImageViews

J'ai essayé de le faire en réglant les images 'écrasées' (3,4,7,8,9,12,13,14) sur setVisibility (GONE) qui fonctionne bien, mais le second LinearLayout vertical a été étendu pour s'adapter à la taille de la nouvelle image que je ne veux pas. Si j'essaie de le définir sur fill_parent, il écrase la taille de l'image. En conséquence, ce que je reçois est la troisième image.

Tout le code XML associé (codes d'identification correspondent à ceux sur l'image):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs01" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs06" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs11" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs16" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
</LinearLayout> 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs02" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs07" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs12" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs17" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
</LinearLayout> 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs03" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs08" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs13" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs18" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
</LinearLayout> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs04" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs09" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs14" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs19" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
</LinearLayout> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs05" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs10" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs15" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
    <ImageView android:id="@+id/gs20" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top" 
     /> 
</LinearLayout> 

</LinearLayout> 

Si je devais le faire en utilisant RelativeLayouts, je rencontre des problèmes quand je setVisibility (Déplacé) depuis la position peut très bien être référencé en utilisant une vue manquante. Le placer à INVISIBLE laisse juste un espace vide, quand ce que je veux vraiment est effectivement d'être de 0px par 0px de taille.

Toute aide serait appréciée; il semble que peu importe ce que j'essaie, quelque chose va toujours un peu mal avec ça, et ça me rend fou.

alt text

Répondre

2

Enfin, il a fonctionné en utilisant RelativeLayout et les ancres. Les ancres sont mis à la taille de la place de la grille de 1x1, alors vous avez une autre série de vues d'image AlignLeft et AlignTop sur la position que vous voulez par exemple:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relay" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <ImageView android:id="@+id/a_t1" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
     /> 
    <ImageView android:id="@+id/a_t2" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t1" 
     /> 
    <ImageView android:id="@+id/a_t3" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t2" 
     /> 
    <ImageView android:id="@+id/a_t4" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t3" 
     /> 
    <ImageView android:id="@+id/a_t5" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t4" 
     /> 


     <ImageView android:id="@+id/a_t6" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_below="@id/a_t1" 
     /> 
    <ImageView android:id="@+id/a_t7" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t6" 
android:layout_below="@id/a_t2" 
     /> 
    <ImageView android:id="@+id/a_t8" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t7" 
android:layout_below="@id/a_t3" 
     /> 
    <ImageView android:id="@+id/a_t9" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t8" 
android:layout_below="@id/a_t4" 
     /> 
    <ImageView android:id="@+id/a_t10" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t9" 
android:layout_below="@id/a_t5" 
     /> 



     <ImageView android:id="@+id/a_t11" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_below="@id/a_t6" 
     /> 
    <ImageView android:id="@+id/a_t12" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t11" 
android:layout_below="@id/a_t7" 
     /> 
    <ImageView android:id="@+id/a_t13" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t12" 
android:layout_below="@id/a_t8" 
     /> 
    <ImageView android:id="@+id/a_t14" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t13" 
android:layout_below="@id/a_t9" 
     /> 
    <ImageView android:id="@+id/a_t15" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t14" 
android:layout_below="@id/a_t10" 
     /> 



<ImageView android:id="@+id/a_t16" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_below="@id/a_t11" 
     /> 
    <ImageView android:id="@+id/a_t17" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t16" 
android:layout_below="@id/a_t12" 
     /> 
    <ImageView android:id="@+id/a_t18" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t17" 
android:layout_below="@id/a_t13" 
     /> 
    <ImageView android:id="@+id/a_t19" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t18" 
android:layout_below="@id/a_t14" 
     /> 
    <ImageView android:id="@+id/a_t20" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_toRightOf="@id/a_t19" 
android:layout_below="@id/a_t15" 
     /> 

    <ImageView android:id="@+id/gs01" 
     android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:layout_alignLeft="@id/a_t1" 
android:layout_alignTop="@id/a_t1" 
     /> 

</RelativeLayout> 

Donc, si vous voulez mettre quelque chose sur # 2 comme mon Par exemple, changez layout_alignLeft et layout_alignTop sur l'identifiant gs01 pour qu'il soit @ id/a_t2, et cela fonctionnera. Cela contourne le problème en mettant setVisibility (GONE) qui supprime le point d'ancrage utilisé pour calculer la position des espaces de la grille.

Maintenant, c'était compliqué. ==

+0

Compliqué! O.o Mais content que tu as réussi à le faire fonctionner! – kcoppock

2

Hmm, je reviendrai quand je rentre à la maison et essayer certaines choses, mais je recommande d'essayer un TableLayout avec 5 lignes, 5 colonnes. Vous devriez être en mesure de définir l'étendue des lignes et des colonnes dans le code (pour permettre à une vue d'occuper plus d'une cellule). C'est ce que j'essaierais d'abord.

This post semble utile.

+0

Le problème que j'ai trouvé avec TableLayout est que bien que vous pouvez faire COLSPAN, vous ne pouvez pas faire ROWSPAN, donc dans l'exemple que j'ai donné à l'origine Image 1 serait étiré (si fill_parent) ou là – Dororo

+0

Ah, d'accord, c'est une bonne question, alors je n'ai jamais utilisé de GridView pour le moment, mais il semble que ce pourrait être une solution possible. J'ai eu Eclipse ici ...) – kcoppock

+0

Mon seul problème avec GridView est que je ne pense pas que cela va permettre la mise en page que je veux, car il va recadrer/redimensionner les images pour s'assurer qu'il fait une grille, comme dans I ' Je pense que cela va permettre à une image de s'étendre sur plusieurs 'carrés de grille' Je cherche à utiliser une TableLayout de base qui contient des images d'espace réservé, puis j'utilise RelativeLayout pour accrocher les plus grandes images à w Quelle que soit la cellule que je veux, mais j'ai du mal à spécifier "android: toLeftOf = '@ ID/some_id'" dans le code et non pas XML. De l'aide? – Dororo

Questions connexes