2013-06-08 8 views
0

Dans l'une de mes activités, j'ai une disposition de la table avec des cellules qui sont ajoutés lors de l'exécution via une classe personnalisée. La mise en page pour mes cellules est la suivante:Android taille ImageView changer de façon inattendue lors de l'exécution

<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+cell/style_2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginBottom="5dp" > 

     <View 
      android:id="@+cell/divider" 
      android:layout_width="fill_parent" 
      android:layout_height="2dp" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:background="#FF000000" /> 

     <ImageView 
      android:id="@+cell/image" 
      android:layout_width="fill_parent" 
      android:layout_height="100dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_below="@cell/divider" 
      android:layout_margin="5dp" 
      android:contentDescription="@string/row_thumbnail" 
      android:scaleType="fitCenter"/> 
    </RelativeLayout> 

</TableRow> 

Cela devient gonflé par la classe suivante:

public Cell(Context context) { 
    super(context); 

    addView(((LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) 
     .inflate(R.layout.gallery_row_1, null)); 
} 

Quand je gonfle la cellule, je mets aussi une image à utiliser comme un écran, la le problème est que la taille de la vue d'image ne reste pas comme il se doit, le bord droit est introuvable, et l'image n'est jamais affichée (probablement loin vers la droite quelque part?), et je ne suis pas sûr d'où mon problème mensonges

c = new Cell(this); 
c.getImageView().setImageBitmap(BitmapFactory.decodeStream(assetManager.open("categories" + File.separator + sec + File.separator + filename))); 
page.addView(c); 

getImageView étant une fonction dans mon téléphone mobile qui renvoie l'élément de ImageView réelle.

Je sais que l'image est placée dans le ImageView, car lorsque la disposition params sont changés, je peux voir l'image, tout simplement pas de taille appropriée.

La sortie souhaitée doit être vue, une vue de division sur le dessus, et un ImageView ci-dessous, qui remplit le parent et est 100dp haut. L'image, peu importe la taille d'origine, devrait être mise à l'échelle et montrée à l'intérieur.

En outre, si je commente la ligne sur laquelle j'ai défini l'image sur ImageView, les limites de disposition sont correctes, comme vu avec Show Layout Bounds activé.

Ma question générale est, pourquoi mon ImageView être redimensionnée lorsque je demande une image.

Toute aide est grandement appréciée.

Répondre

2

Voir this post on LayoutInflater pourquoi votre mise en page est de se mêle. Comme il semble que votre classe cellulaire est une classe interne de certains ViewGroup (depuis que vous appelez addView()), essayez d'utiliser le code suivant:

LayoutInflater inflater = LayoutInflater.from(context); 
inflater.inflate(R.layout.gallery_row_1, this); 

ou

LayoutInflater inflater = LayoutInflater.from(context); 
View view = inflater.inflate(R.layout.gallery_row_1, this, false); 
addView (view); 

au lieu d'utiliser

inflater.inflate(R.layout.gallery_row_1, null); 

l'appel inflate() utilise le second paramètre (le conteneur) pour déterminer quel type de LayoutParams à utiliser pour interpréter le XML. Si vous passez null, tous les attributs de disposition sont ignorés. Vous devriez plutôt l'appeler avec le conteneur réel (qui l'ajoutera automatiquement au conteneur) ou l'appeler avec le conteneur, et un troisième paramètre lui disant de ne pas encore attacher la vue, puis faire ce que vous voulez avec la vue gonflée .

+1

Je t'aime. Merci! : D J'ai passé 2 bonnes heures à jouer avec la config XML essayant de faire en sorte que tout soit bien installé ... –

Questions connexes