2013-05-05 6 views
4

У меня есть LinearLayout, у которого есть кнопки и списки. Получив много кнопок, я решил поместить этот LinearLayout в ScrollView, но после установки ScrollView в ListViews отображается только один элемент.ScrollView admubing ListView внутри LinearLayout

Ниже приводится код, прежде чем ScrollView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".WorkplaceObservationActivity" > 

    <Button 
     android:id="@+id/btn_reportType" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Report Type" /> 

    <ListView 
     android:id="@+id/lv_reportType" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:visibility="gone" > 
    </ListView> 

    <Button 
     android:id="@+id/btn_defineJob" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Define Job" /> 

    <ListView 
     android:id="@+id/lv_Jobs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
     android:visibility="gone" > 
    </ListView> 

    <Button 
     android:id="@+id/btn_timeLocation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Time and Location" /> 

    <LinearLayout 
     android:id="@+id/ll_timeLocation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:visibility="gone" > 

     <Button 
      android:id="@+id/btn_setCurrentTime" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:text="Use current time and date" /> 

     <Button 
      android:id="@+id/btn_setCustomTime" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:text="Enter custom time" /> 

     <Button 
      android:id="@+id/btn_setCustomDate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:text="Enter custom date" /> 

     <TextView 
      android:id="@+id/tv_time" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="Time and Date: " 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:visibility="gone" /> 
    </LinearLayout> 

    <Button 
     android:id="@+id/btn_ReportDetails" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Report Details" /> 

    <LinearLayout 
     android:id="@+id/ll_ReportDetails" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:visibility="gone" > 

     <Button 
      android:id="@+id/btn_CaptureVideo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="Capture Video" /> 

     <ListView 
      android:id="@+id/lv_ReportDetailsItems" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" > 
     </ListView> 
    </LinearLayout> 

    <Button 
     android:id="@+id/btn_Review" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Review" /> 

    <LinearLayout 
     android:id="@+id/ll_Review" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/tv_Review_ReportType" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Report Type: " 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/tv_Review_DateTime" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Date and Time: " 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/tv_Review_SupportingFiles" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Supporting Files: " 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <ListView 
      android:id="@+id/lv_ReviewItems" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:visibility="gone" > 
     </ListView> 

     <Button 
      android:id="@+id/btn_Review_Send" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Send" /> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:weightSum="2" > 

      <Button 
       android:id="@+id/btn_Review_Save" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:text="Save Draft" /> 

      <Button 
       android:id="@+id/btn_Review_Discard" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:text="Discard" /> 
     </LinearLayout> 
    </LinearLayout> 

</LinearLayout> 

для приведенного выше кода я получаю следующий снимок enter image description here

Ниже приведен код XML после ScrollView

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     tools:context=".WorkplaceObservationActivity" > 

     <Button 
      android:id="@+id/btn_reportType" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Report Type" /> 

     <ListView 
      android:id="@+id/lv_reportType" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:visibility="gone" > 
     </ListView> 

     <Button 
      android:id="@+id/btn_defineJob" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Define Job" /> 

     <ListView 
      android:id="@+id/lv_Jobs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
      android:visibility="gone" > 
     </ListView> 

     <Button 
      android:id="@+id/btn_timeLocation" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Time and Location" /> 

     <LinearLayout 
      android:id="@+id/ll_timeLocation" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:visibility="gone" > 

      <Button 
       android:id="@+id/btn_setCurrentTime" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right" 
       android:text="Use current time and date" /> 

      <Button 
       android:id="@+id/btn_setCustomTime" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right" 
       android:text="Enter custom time" /> 

      <Button 
       android:id="@+id/btn_setCustomDate" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right" 
       android:text="Enter custom date" /> 

      <TextView 
       android:id="@+id/tv_time" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:text="Time and Date: " 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:visibility="gone" /> 
     </LinearLayout> 

     <Button 
      android:id="@+id/btn_ReportDetails" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Report Details" /> 

     <LinearLayout 
      android:id="@+id/ll_ReportDetails" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:visibility="gone" > 

      <Button 
       android:id="@+id/btn_CaptureVideo" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:text="Capture Video" /> 

      <ListView 
       android:id="@+id/lv_ReportDetailsItems" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" > 
      </ListView> 
     </LinearLayout> 

     <Button 
      android:id="@+id/btn_Review" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Review" /> 

     <LinearLayout 
      android:id="@+id/ll_Review" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/tv_Review_ReportType" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Report Type: " 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 

      <TextView 
       android:id="@+id/tv_Review_DateTime" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Date and Time: " 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 

      <TextView 
       android:id="@+id/tv_Review_SupportingFiles" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Supporting Files: " 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 

      <ListView 
       android:id="@+id/lv_ReviewItems" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:visibility="gone" > 
      </ListView> 

      <Button 
       android:id="@+id/btn_Review_Send" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Send" /> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:weightSum="2" > 

       <Button 
        android:id="@+id/btn_Review_Save" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Save Draft" /> 

       <Button 
        android:id="@+id/btn_Review_Discard" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Discard" /> 
      </LinearLayout> 
     </LinearLayout> 
    </LinearLayout> 

</ScrollView> 

и Ниже приводится sceen выстрел выше

enter image description here

Я хочу показать полный список предметов после прокрутки.

+0

я полностью с той же проблемой, но хочу показать несколько списков .. и кнопки в большой вертикальной Scrollview (всегда вертикальный ..), но сталкиваются с той же проблемой :(любое обновление? – cV2

ответ

10

Существует конфликт между ScrollView и ListView. В общем, вы не можете поставить ListView внутри ScrollView. ListView уже понимает про прокрутку и прокручивается сам. ListView должен знать, сколько вертикального пространства на экране он должен использовать, чтобы он мог контролировать прокрутку и отображение своих детей. Трудно понять, как должен вести себя макет, который вы опубликовали.

В любом случае, единственный способ разместить ListView внутри ScrollView - указать ListView точно, сколько вертикального пространства оно должно использовать. Вы не можете использовать match_parent или wrap_content для layout_height, вам нужно зафиксировать вертикальный размер. Это помогает ScrollView определить, сколько вертикального пространства занимает каждый из его детей, а затем ScrollView может делать правильные вещи.

Попробуйте установить android:layout_height="80dp" на все ваши ListView s, чтобы увидеть, как это ведет себя.

EDIT: После того, как раз, глядя на макет, у меня есть другое предложение

После снова глядя на макет, я предполагаю, что вы хотите иметь только один из ListView с видимыми в данный момент времени (остальные будут GONE).В этом случае, вы можете попробовать следующее:

  1. Удалить окружающий ScrollView
  2. Набор android:layout_weight="1" и android:layout_height="1px" на всех ListView s

Это в основном говорит менеджер компоновки, что ListView следует отдавать все доступное пространство на экране (то есть: все, что осталось после того, как остальные View s выложены). Это приведет к тому, что ListView развернется, чтобы занять все свободное место на экране, оставив все остальные View s на экране, и весь экран не будет прокручиваться, только ListView. Это может быть лучший способ дать вам то, что вы хотите.

Возможно, вы также можете использовать ExpandableListView, который, кажется, является тем, что вы пытаетесь воссоздать здесь.

+0

Спасибо за помощь. Мне нужно подумать о моем дизайне интерфейса, в котором будет использоваться 'ExpandableListView'. –

0

Попробуйте изменить андроид: layout_width = "wrap_content" на android: layout_width = "match_parent" o listview.

+0

я согласен , изменение параметров макета может решить проблему. – CRUSADER

+0

проблема не решена путем изменения параметров макета. –

+1

'layout_width' не имеет абсолютно никакого отношения к этой проблеме. Проблема здесь -' layout_height'. –

2

У вас не может быть прямо или косвенно ListView внутри ScrollView. Это потому, что они смогут управлять событиями касания. Вы должны задуматься о своем дизайне интерфейса

+0

возможно addHeaderView и addFooteraView ListView - это все, что вам нужно – Blackbelt

1

Сделайте одну вещь, попробуйте указать строгую кодировку высоты для вашего списка, например, android: layou_height = "100dp", и он будет работать, но это не рекомендуется.

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