Question

Je vois un comportement étrange avec ma ListView, que je n'arrive pas à me déplacer.

J'ai un ListView, qui est rempli de données. Chaque ligne contient une image et trois étiquettes de texte. Voici mon XML pour la ligne (je le gonfle dans l'adaptateur getView méthode):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="0dip"
     android:paddingBottom="0dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

    <ImageView android:id="@+id/Icon"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:padding="2dp"
        android:scaleType="fitCenter"
        android:contentDescription="@string/app_icon"/>

    <TextView android:id="@+id/TxtName"
         android:scrollHorizontally="false"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:textColor="@android:color/black"
         android:background="@color/list_bg1"
         android:layout_weight="2"
         android:padding="2dp"/>

     <TextView android:id="@+id/TxtPackage"
         android:scrollHorizontally="false"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_weight="2"
         android:textColor="@android:color/black"
         android:background="@color/list_bg2"
         android:padding="2dp"/>

     <TextView android:id="@+id/TxtSource"
         android:scrollHorizontally="false"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_weight="2"
         android:background="@color/list_bg3"
         android:textColor="@android:color/black"
         android:padding="2dp"/>
</LinearLayout>

Maintenant, tout ce qui va dans les champs de texte peut être de n'importe quel Lenght (de quelques caractères à 80-100 caractères) et je veux que les étiquettes s'enroulent et la hauteur de la ligne se dilate pour s'adapter à la hauteur des étiquettes enveloppées.

Pourtant, les étiquettes s'enroulent correctement, mais la hauteur de la ligne ne se développe pas, donc le bas des étiquettes est coupé. Voici mon getView méthode:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    SetInfo app = (SetInfo)getItem(position);
    if(app == null)
        return null;

    LinearLayout row = (LinearLayout) (convertView == null
               ? LayoutInflater.from(context).inflate(R.layout.listitem, parent, false)
               : convertView);
    ((TextView)row.findViewById(R.id.TxtName)).setText(app.getName());
    ((TextView)row.findViewById(R.id.TxtPackage)).setText(app.getPackage());
    ((TextView)row.findViewById(R.id.TxtSource)).setText(app.getSource());
    if(app.getIcon() != null)
        ((ImageView)row.findViewById(R.id.Icon)).setImageDrawable(app.getIcon());
    return row;
}

Comment puis-je avoir les lignes pour être d'une hauteur différente, ajustée automatiquement pour s'adapter à tout le contenu?

Était-ce utile?

La solution

Essayez de modifier vos TextViews pour avoir Android: Layout_Height = "Wrap_Content".

Autres conseils

J'ai eu le problème SAM et la réponse de @ Maebe n'a pas fonctionné pour moi. Pour le faire fonctionner, j'ai dû appeler demande de demande () sur mon TextView dans GetView de l'adaptateur.

Ainsi, dans votre cas, vous devrez appeler requestLayout () pour chaque TextView:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    // Inflate your view etc.

    row.findViewById(R.id.TxtName).requestLayout();
    row.findViewById(R.id.TxtPackage).requestLayout();
    row.findViewById(R.id.TxtSource).requestLayout();
    return row;
}

J'ai essayé toutes sortes de trucs et c'est le seul à avoir fonctionné dans mon cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top