web-dev-qa-db-fra.com

Comment définir la hauteur des lignes ListView

Je vous montre l'image ci-dessous dans laquelle la hauteur des rangées n'est pas la même, je veux que les rangées soient de la même hauteur.

enter image description here

Dans mon programme, j'obtiens les données du service XML que j'ai analysé et affiche le résultat sur la vue liste mais la hauteur des lignes ListView n'est pas la même.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:orientation="vertical"
  Android:background="@drawable/list_selector"
  Android:padding="3dip"
  Android:layout_width="match_parent"
  Android:gravity="center"
  Android:layout_height="10dp">

    <TextView Android:layout_height="wrap_content" Android:text="ITEM"
        Android:layout_width="wrap_content" Android:id="@+id/txtItem"
        Android:textAppearance="?android:attr/textAppearanceLarge"
        Android:textSize="15dip"
        Android:textStyle="bold"
        Android:textColor="#040404"></TextView>

    <TextView Android:layout_height="wrap_content" Android:text="MANUFACTURER"
        Android:layout_width="wrap_content" Android:id="@+id/txtItemTwo"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:textSize="14dip"
        Android:textColor="#FF7F50"

        ></TextView>


</LinearLayout>

Je fixe déjà la hauteur

Android: layout_height = "10dp"

mais toujours pas pareil lors de l'affichage sur listView.

Ceci est mon adaptateur personnalisé pour getVieew: -

 public class MyEventAdapter extends BaseAdapter {

     ArrayList < String > listTitle;
     ArrayList < String > listFullText;

     Activity activity;

     public MyEventAdapter(Activity activity, ArrayList < String > listTitle, ArrayList < String > listFullText) {
         super();
         this.listTitle = listTitle;
         this.listFullText = listFullText;

         this.activity = activity;
     }

     public int getCount() {
         // TODO Auto-generated method stub
         return listTitle.size();
     }

     public Object getItem(int position) {
         // TODO Auto-generated method stub
         return null;
     }

     public long getItemId(int position) {
         // TODO Auto-generated method stub
         return 0;
     }

     private class ViewHolder {
         TextView txtViewTitle;
         TextView txtViewTitleTwo;

     }

     public View getView(int position, View view, ViewGroup parent) {
         // TODO Auto-generated method stub

         ViewHolder title;
         LayoutInflater inflater = activity.getLayoutInflater();

         if (view == null) {
             view = inflater.inflate(R.layout.lview_row, null);
             title = new ViewHolder();

             title.txtViewTitle = (TextView) view.findViewById(R.id.txtItem);
             title.txtViewTitleTwo = (TextView) view.findViewById(R.id.txtItemTwo);

             view.setTag(title);
         } else {
             title = (ViewHolder) view.getTag();
         }

         title.txtViewTitle.setText(listTitle.get(position));
         title.txtViewTitleTwo.setText(listFullText.get(position));

         return view;
     }
 }

N'importe qui me plaît pour obtenir le résultat souhaité.

Merci d'avance.

39
user755278

le problème est que vous utilisez mal le gonfleur, ne donnez pas null comme nœud racine

si vous passez null comme nœud racine, tous les paramètres de taille que vous définissez dans le xml ne fonctionnent pas

le bon code est

view = inflater.inflate(R.layout.lview_row, parent, false);

http://www.doubleencore.com/2013/05/layout-inflation-as-intended/

138
clever

remplacez la méthode getView(int position, View convertView, ViewGroup parent) dans votre classe MyEventAdapter et utilisez view.setMinimumHeight(minHeight); pour définir la hauteur de vue minimale.

définissez la hauteur de vue minimale avec la méthode `getView (int position, View convertView, ViewGroup parent) 'comme suit:

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

    ViewHolder title;
    LayoutInflater inflater = activity.getLayoutInflater();

    if (view == null) {
        view = inflater.inflate(R.layout.lview_row, null);
        view.setMinimumHeight(minHeight); //set minimum height of view here
        title = new ViewHolder();

        title.txtViewTitle = (TextView) view.findViewById(R.id.txtItem);
        title.txtViewTitleTwo = (TextView) view.findViewById(R.id.txtItemTwo);

        view.setTag(title);
    } else {
        title = (ViewHolder) view.getTag();
    }

    title.txtViewTitle.setText(listTitle.get(position));
    title.txtViewTitleTwo.setText(listFullText.get(position));

    return view;    
}
1
Ravi1187342
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:orientation="vertical"
  Android:background="@drawable/list_selector"
  Android:padding="3dip"
  Android:layout_width="match_parent"
  Android:gravity="center"
  Android:layout_height="match_parent">

    <TextView Android:layout_height="wrap_content" Android:text="ITEM"
        Android:layout_width="wrap_content" Android:id="@+id/txtItem"
        Android:textAppearance="?android:attr/textAppearanceLarge"
        Android:textSize="15sp"
        Android:textStyle="bold"
        Android:textColor="#040404"></TextView>

    <TextView Android:layout_height="wrap_content" Android:text="MANUFACTURER"
        Android:layout_width="wrap_content" Android:id="@+id/txtItemTwo"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:textSize="14sp"
        Android:textColor="#FF7F50"

        ></TextView>


</LinearLayout>

Si vous avez plus d'une ligne dans votre texte, définissez votre texte sur une seule ligne afin qu'il ne vienne pas en deuxième ligne et ne modifie pas la hauteur de chaque ligne.

1
Bharat Sharma

Si vous avez plus d'une ligne dans votre texte, définissez votre texte sur une seule ligne afin qu'il ne vienne pas en deuxième ligne et ne modifie pas la hauteur de chaque ligne.

0
胡天宇