2016-01-31 4 views
0

У меня есть активность RelativeLayout, которая содержит список. Я хочу, чтобы высота списка отображалась на основе его элементов, я искал в Интернете и обнаружил, что многие методы делают это, но все методы дают высоту списка, превышающую высоту элементов. метода я использую следующий:Высота списка на основе элементов больше высоты элементов

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
     // pre-condition 
     return; 
    } 

    int totalHeight = 0; 
    int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), 
      View.MeasureSpec.AT_MOST); 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     View listItem = listAdapter.getView(i, null, listView); 
     listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED); 
     totalHeight += listItem.getMeasuredHeight(); 
     } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight 
      + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 

, когда я отладку метод Если обнаружен, что некоторые элементы высота равна «45», а некоторые элементы высота, равная «66», а все элементы в списке ракурсе имеют ту же высоту при появлении активности.

Вот снимок деятельности, список ракурс фон светло-серый, чтобы показать высоту списка ракурса: Activity snpapshot

+0

Выполнение этого в значительной степени поражает цель использования «ListView». Почему бы вам просто не использовать вертикальный «LinearLayout», а его «layout_height» - «wrap_content»? –

+0

Если вы хотите иметь представление на основе списка с разной высотой, я думаю, что это проще, если вы используете RecyclerView, а не ListViwe – hakim

ответ

0

, если вы хотите, чтобы весь список, чтобы быть видимыми, то не использовать список вид ListView не сделал для этого сделано, чтобы заполнить экран и повторное использование этого мнения

использовать Scrollview с линейным и раздувать их внутрь, но это плохой подход и займет много времени поэтому, пожалуйста, повторно причины вы делаете это, может быть, вы найдете лучший виджет для него или, может быть, поделиться скриншотом с ui, который вы пытаетесь достичь eve