2015-06-16 2 views
0

Как говорится в названии.Установить минимальную расширяемую высоту в список Показать ячейку Android

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

Как это делается?

EDIT КОДА:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 
    <RelativeLayout 

     android:layout_width="match_parent" 
     android:layout_height="100dp">  <---- Change this 

     <ImageView 
      android:layout_width="90dp" 
      android:layout_height="90dp" 
      android:id="@+id/imageView2" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:src="@drawable/tn"/> 

     <TextView 
      android:layout_width="55dp" 
      android:layout_height="wrap_content" 
+0

То, что вы сделали до сих пор, пожалуйста, поделитесь здесь ваш код. – dhuma1981

+0

Возможно, с пользовательской 'ViewGroup'. Контейнеры для акций Android не работают "или" хорошо (100dp или 'wrap_content', в зависимости от того, что больше). Вы всегда можете использовать прозрачный 'View' 100dp где-то в качестве прокладки, чтобы создать минимальную высоту. Создание собственной 'ViewGroup', возможно, путем расширения того, что вы сейчас находитесь и переопределения' onMeasure() 'и т. Д., Было бы более эффективным. – CommonsWare

ответ

0

пытается это вычислить высоту динамически

public static void setListViewHeight(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
     return; 
    } 
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); 
    int totalHeight = 0; 
    View view = null; 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     view = listAdapter.getView(i, view, listView); 
     if (i == 0) { 
      view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT)); 
     } 
     view.measure(desiredWidth, MeasureSpec.AT_MOST); 
     totalHeight += view.getMeasuredHeight(); 
    } 
    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 
+0

Спасибо за подробный ответ. Я не понимал, что потребуется столько кода. –

+0

Это не будет работать для многих списков. После того, как строки будут переработаны, минимальная высота исчезнет. – CommonsWare

+0

Это код для динамического измерения размера строки адаптера. Поэтому вам нужно пройти только просмотр списка, он автоматически рассчитает свой размер и изменит размер. –

Смежные вопросы