Как установить высоту строк ListView

Я показываю вам изображение ниже, на котором высота строк не одинакова. Я хочу, чтобы строки были одинаковой высоты.

введите здесь описание изображения

В моей программе я получаю данные из службы XML, которую я проанализировал, и отображаю результат в виде списка, но высота строк ListView не одинакова.

<?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>

Я уже установил высоту

андроид: layout_height = "10dp"

но все же не то же самое при отображении в listView.

Это мой собственный адаптер для getView: -

 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;
     }
 }

Кто-нибудь, пожалуйста, мне правильный способ получить желаемый результат.

Заранее спасибо.


person user755278    schedule 30.04.2012    source источник
comment
Если вы используете собственный адаптер, опубликуйте свой код метода getView из пользовательского адаптера.   -  person Bharat Sharma    schedule 30.04.2012
comment
Ваша реализация должна работать, вы должны делать что-то еще где-то :).   -  person Warpzit    schedule 30.04.2012
comment
привет @BharatSharma, я только что опубликовал свой собственный код адаптера, пожалуйста, посмотрите, спасибо ...   -  person user755278    schedule 30.04.2012
comment
запустите lint для своего кода, tools.android.com/tips/lint   -  person L7ColWinters    schedule 30.04.2012
comment
используйте view.setMinimumHeight(minHeight);, чтобы установить высоту вашего представления внутри вашего метода getView() вашего класса MyEventAdapter   -  person Ravi1187342    schedule 30.04.2012


Ответы (5)


проблема в том, что вы неправильно используете инфлятор, не указывайте нуль в качестве корневого узла

если вы передадите null в качестве корневого узла, все параметры размера, которые вы установили в xml, не будут работать

правильный код

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

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

person clever    schedule 22.06.2013
comment
хотя это имеет некоторый смысл, это работает не во всех случаях. Лучший ответ с необходимостью большего самоанализа, поскольку предоставленная ссылка недостаточно глубоко вникает в реальную проблему. - person leRobot; 04.09.2014
comment
некоторые предметы спрятаны помогите пожалуйста - person W I Z A R D; 09.09.2014

<?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>

Если в вашем тексте более одной строки, установите текст как одну строку, чтобы он не попадал во вторую строку, и меняйте высоту каждой строки.

person Bharat Sharma    schedule 30.04.2012

переопределите метод getView(int position, View convertView, ViewGroup parent) в вашем классе MyEventAdapter и используйте view.setMinimumHeight(minHeight); для установки минимальной высоты просмотра.

установите минимальную высоту просмотра с помощью метода `getView (int position, View convertView, ViewGroup parent)' следующим образом:

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;    
}
person Ravi1187342    schedule 30.04.2012

Если в вашем тексте более одной строки, установите текст как одну строку, чтобы он не попадал во вторую строку, и меняйте высоту каждой строки.

person 胡天宇    schedule 22.08.2015

Прежде всего, вы должны использовать sp, чтобы указать размер текста, а не dip (dp), во-вторых, я думаю, что у вас есть некоторые противоречивые размеры, у вас есть 2 текстовых поля 15 + 14 dp в макете ТОЛЬКО 10 дп. Попробуйте увеличить высоту макета до 40 dp и изменить размеры вашего текстового просмотра, чтобы использовать sp

person Toorop    schedule 30.04.2012