Как установить высоту строк ListView
Я покажу вам изображение ниже, в котором высота строк не одинакова. Я хочу, чтобы строки были одинаковой высоты.
![enter image description here]()
В моей программе я получаю данные из службы 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>
Я уже устанавливаю высоту
Android: layout_height = "10dp"
но все же не так, когда diplaying на listView.
Это мой пользовательский адаптер для 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;
}
}
Кто-нибудь, пожалуйста, добейтесь того, чтобы получить желаемый результат.
Спасибо заранее.
Ответы
Ответ 1
проблема в том, что вы неправильно используете инфлятор, не даете null в качестве корня node
если вы передаете null в качестве корня node, все параметры размера, заданные в xml, не работают
правильный код
view = inflater.inflate(R.layout.lview_row, parent, false);
http://www.doubleencore.com/2013/05/layout-inflation-as-intended/
Ответ 2
переопределить метод getView(int position, View convertView, ViewGroup parent)
в вашем классе MyEventAdapter
и использовать view.setMinimumHeight(minHeight);
для установки минимальной высоты представления.
установить минимальную высоту представления с помощью метода getView (int position, View convertView, родительской группы ViewGroup) следующим образом:
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;
}
Ответ 3
<?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>
Если в тексте имеется более одной строки, установите текст как одну строку, чтобы он не вошел во вторую строку и не изменил высоту каждой строки.
Ответ 4
Если в тексте имеется более одной строки, установите текст как одну строку, чтобы он не вошел во вторую строку и не изменил высоту каждой строки.
Ответ 5
Прежде всего, вы должны использовать sp, чтобы указать размер текста, а не dip (dp), во-вторых, я думаю, что у вас есть некоторые противоречивые измерения, у вас есть 2 текстовых поля 15 + 14 dp в макет ТОЛЬКО 10 дп. Попытайтесь увеличить высоту макета до 40 дп и измените размеры вашего текста, чтобы использовать sp