1

Je développe une application Android. Dans mon application, j'ai besoin de gonfler la liste des vues de manière dynamique. Je les ai ajoutés et travaillons. Le problème est de régler la largeur et la hauteur de la mise en page. Maintenant, je vais démontrer mon problème avec un projet simple. En fait, mon projet est beaucoup plus compliqué que ce simple projet.Impossible de définir la largeur de la mise en page, la hauteur et le poids de la vue agrandie en XML dans Android

Je gonfle les vues de cette disposition.

  <LinearLayout 
       android:orientation="horizontal" 
       android:id="@+id/cm_photos_container" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

      </LinearLayout> 

Je Boucler dans une liste de bitmap et vue d'ajouter dynamiquement comme suit

for(Bitmap bmp : bitmaps) 
{ 
    View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null); 
       ImageView previewImageView = (ImageView)preview.findViewById(R.id.item_cm_preview_image); 
       previewImageView.setImageBitmap(bmp); 
    container.addView(preview); 
} 

S'il vous plaît noter, dans le code ci-dessus, le conteneur est un LinearLayout ajouté dynamiquement au XML parent dans ce qui précède.

container = new LinearLayout(this); 
        container.setOrientation(LinearLayout.HORIZONTAL); 
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
        container.setLayoutParams(params); 

parentLinearLayout.addView(container); 

Ceci est mon item_cm_preview_image.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:layout_weight="1" 
    android:layout_height="400dp" 
    android:layout_width="0dp" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <ImageView 
     android:scaleType="centerCrop" 
     android:id="@+id/item_cm_preview_image" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

Comme vous pouvez le voir, je régler la hauteur de mise en page 400dp, largeur 0 et layout_weight à 1 dans le fichier XML. Donc toute la hauteur de l'image doit être la même et la largeur doit être égale à cause de layout_weight. Mais le résultat n'est pas comme prévu. Vous pouvez voir la capture d'écran ci-dessous.

enter image description here

Comme vous pouvez le voir dans la capture d'écran, les deux layout_weight et la hauteur ne fonctionnent pas pour toutes les vues gonflés. Mais si j'ajoute dynamiquement ViewGroup supplémentaire et gonfle la vue à cette disposition, cela fonctionne. Ci-dessous mon code

//This happening in for loop 
LinearLayout wrapper = new LinearLayout(this); 
       wrapper.setLayoutParams(new LinearLayout.LayoutParams(0,500,1)); 

       View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null); 
       ImageView previewImageView = (ImageView)preview.findViewById(R.id.item_cm_preview_image); 
       previewImageView.setImageBitmap(bmp); 

       wrapper.addView(preview); 
       container.addView(wrapper); 

Ceci est le résultat:

enter image description here

Comme vous pouvez le voir à la fois de travail et de la hauteur layout_weight lorsque j'utilise une mise en page dynamique linéaire supplémentaire. Pourquoi le réglage du poids et de la hauteur de la mise en page en XML ne fonctionne-t-il pas? Pourquoi la deuxième façon fonctionne? Comment puis-je définir le poids et la hauteur dans un fichier de mise en page XML? C'est possible?

Répondre

6

Si vous gonflez la mise en page en utilisant la méthode

View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null); 

il sauter sa largeur et sa hauteur ... paramètres, mais si vous utilisez:

View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,parent,false); 

il devrait fonctionner correctement, par exemple si vous gonflez la vue en tant que parent que vous pouvez fournir (ViewGroup) getView():

View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,(ViewGroup) getView(), false); 
+0

Oh, merci beaucoup. Je le fais fonctionner. C'est exactement ce que je voudrais savoir. Merci. –

+0

A travaillé pour moi merci – pcj