2016-02-26 4 views
1

У меня есть ScrollView, внутри которого у меня есть ListView, за которым следует несколько TextViews. ListView, который у меня есть, заполняется с использованием пользовательского адаптера, а ширина элементов может варьироваться в зависимости от того, на какой странице мы находимся. Вот мой ScrollView:Высота просмотров внутри ScrollView

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/options_listview"> 
     </ListView> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@id/options_listview"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="24dp" 
       android:text="Explanation:" 
       android:id="@+id/explanation_header"/> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/explanation_text" 
       android:layout_below="@+id/explanation_header" 
       android:text="stuff..."/> 
     </RelativeLayout> 
    </RelativeLayout> 
</ScrollView> 

ПРОБЛЕМА

Высота ListView не отображается полностью. Я программно установки высоты, как:

public static void setListViewHeight(ListView list) { 

    int height = 0; 

    for (int i = 0; i < list.getCount(); i++) { 
     View childView = list.getAdapter().getView(i, null, list); 
     childView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
     height+= childView.getMeasuredHeight(); 
    } 

    //dividers height 
    height += list.getDividerHeight() * list.getCount(); 


    ViewGroup.LayoutParams params = list.getLayoutParams(); 
    params.height = height; 
    list.setLayoutParams(params); 

    Log.i("Height ", height + ""); 
} 

Теперь я вижу в журналах, что я получаю ту же высоту для всех ListViews независимо от высоты элемента. Как я могу сделать ListView полностью видимым в моем scrollview?

+0

изменить listview высота соответствует родительскому –

+0

не повезло с этим. –

+0

- это прокрутка списка? Значит, у них достаточно объекта, чтобы listview мог прокручивать или покрывать все пространство? –

ответ

0

Как Хизар Hayat отметил, ListView не должен использоваться внутри ScrollView` потому ListView уже есть функция прокрутки. У этого было бы конфликты дизайна.

Таким образом, делая 3 различных макетов решить мою проблему:

  1. Ведение ListView в первом файле макета.
  2. Создайте еще один макет, header.xml и поместите все выше ListView в этот макет.
  3. Выполнение третьей компоновки, footer.xml и хранение всего ниже ListView в этом нижнем колонтитуле.
  4. Раздувание эти колонтитулов раскладки в классе активности и добавления заголовка и нижнего колонтитула к ListView

Таким образом, все, свитки в одном дыхании и все макеты представлены без разреза. Хорошо, что мы можем иметь любое количество верхних и нижних колонтитулов до ListView.

0
Please try this layout: 

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

     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_above="@+id/tVL" 
      android:id="@+id/options_listview"> 
     </ListView> 

     <RelativeLayout 
      android:id="@+id/tVL" 
      android:layout_alignParentBottom="true" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="24dp" 
       android:text="Explanation:" 
       android:id="@+id/explanation_header"/> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/explanation_text" 
       android:layout_below="@+id/explanation_header" 
       android:text="stuff..."/> 
     </RelativeLayout> 
    </RelativeLayout> 
+0

Спасибо за ответ, но можем ли мы использовать 'ориентацию' в' RelativeLayout'? –

+0

oh нет, что линия была написана ошибочно. Извини за это. если вы удалите этот код строки, он будет работать плавно. –

+0

Извините, но это не сработает. ListView не отображается полностью. Он прокручивается, но он полностью не отображается. Я пытаюсь сделать экран таким, чтобы список полностью отображался, а TextViews под ним следуют. Так что, когда я прокручиваю, я начинаю с первого элемента listView и останавливаюсь в последнем тексте textview. Это просто исправление текстовых просмотров в нижней части экрана, и более крупные списки просматриваются выше. –

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