Intereting Posts
Создание макета панели инструментов в виде фрагмента программно Можно ли удалить символы из общей библиотеки, созданной с помощью Android NDK? Android, NetworkInfo.getTypeName (), NullpointerException Предложения по форме ввода данных в android Как я могу сделать жирным шрифтом и подчеркнуть строку динамически в коде Android? База данных Android заблокирована Как изменить тост-сообщение, которое появляется после успешной покупки продукта в биллинге в приложении Котлин: Итерации через JSONArray Отключение PopupWindow при касании вне всплывающего окна, без использования устаревшего конструктора Как синхронизировать приложение для Android с Couchbase Server? Java.lang.NullPointerException: попытка вызвать виртуальный метод по ссылке нулевого объекта Использование сервисов игр Google Play в эмуляторе Android SDK Не удалось получить URL Как исправить это следует только вызывать, когда курсор действителен с помощью ExpandableListView Измените тему деятельности программы

Динамическая высота для строки ListView в android

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

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

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

Теперь все, что входит в текстовые поля, может иметь любую длину (от нескольких символов до 80-100 символов), и я хочу, чтобы этикетки просто обертывались, а высота строки расширялась, чтобы разместить высоту обернутых ярлыков.

Тем не менее, метки накладываются хорошо, но высота строки не расширяется, поэтому нижняя часть меток обрезается. Вот мой метод getView :

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

Как я могу иметь, чтобы строки имели разную высоту, настраивались автоматически, чтобы соответствовать всему содержимому?

    Попробуйте изменить свой TextViews на наличие android: layout_height = "wrap_content".

    У меня была проблема с самим собой, и ответ @ maebe не работал для меня. Чтобы заставить его работать, мне пришлось вызвать requestLayout () в моем TextView в getView адаптера.

    Итак, в вашем случае вам нужно будет вызвать requestLayout () для каждого 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; } 

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