【问题标题】:Scrollview inside viewpager in androidandroid中viewpager内的滚动视图
【发布时间】:2017-05-23 00:07:43
【问题描述】:

问题是 viewpager 可以工作,但 scrollview 不能。 ListView 以异步方式填充,也许这是问题,因此没有正确测量布局。无论如何,这是片段的布局(viewpager 有两个选项卡,这是第二个选项卡的内容:

    <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"
    android:fillViewport="true"
    android:orientation="vertical">

    <RelativeLayout

      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="#EDEDED"
        tools:context="com.adriagate.onlineandroid.fragments.GuestsRegistrationFragment">
       <TextView
          android:id="@+id/guestsLabelGuestRegistration"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:gravity="center"
          android:paddingTop="24dp"
          android:text="Gosti"
          android:textStyle="bold" />

      <android.support.design.widget.TextInputLayout
          android:id="@+id/textInputLayoutOfferedService"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_below="@id/guestsLabelGuestRegistration"

          android:layout_marginLeft="@dimen/padding10dp"
          android:layout_marginRight="@dimen/padding10dp"
          android:layout_marginTop="@dimen/padding10dp"
          android:background="@color/caldroid_white">

      <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:padding="4dp"

          android:text="Vrsta usluge"
          android:textSize="12dp" />

      <android.support.v7.widget.AppCompatSpinner
          android:id="@+id/spinnerOfferedService"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:padding="2dp"

          android:theme="@style/customSpinnerTheme" />
  </android.support.design.widget.TextInputLayout>

  <android.support.design.widget.TextInputLayout
      android:id="@+id/textInputArrivalOrganizations"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/textInputLayoutOfferedService"
      android:layout_marginLeft="@dimen/padding10dp"
      android:layout_marginRight="@dimen/padding10dp"
      android:layout_marginTop="@dimen/padding10dp"
      android:background="@color/caldroid_white">

      <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:padding="4dp"
          android:text="Organizacija dolaska"
          android:textSize="12dp" />

      <android.support.v7.widget.AppCompatSpinner
          android:id="@+id/spinnerArrivalOrganization"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:clipToPadding="true"
          android:theme="@style/customSpinnerTheme" />
  </android.support.design.widget.TextInputLayout>


  <LinearLayout
      android:id="@+id/linearLayoutHoursGuestRegistrationWrapper"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/textInputArrivalOrganizations"
      android:layout_marginLeft="@dimen/padding10dp"
      android:layout_marginRight="@dimen/padding10dp"
      android:layout_marginTop="@dimen/padding10dp"
      android:background="@color/caldroid_white">

      <RelativeLayout
          android:id="@+id/relativeLayoutArrivalHourGuestRegistrationFragment"
          android:layout_width="wrap_content"

          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:paddingBottom="@dimen/padding5dp"
          android:paddingTop="@dimen/padding5dp">

          <TextView
              android:id="@+id/textViewArrivalHourGuestRegistrationFragment"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerHorizontal="true"
              android:text="10:00"
              android:textSize="22dp" />

          <TextView
              android:id="@+id/textViewLabelArrivalHourGuestRegistrationFragment"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_below="@id/textViewArrivalHourGuestRegistrationFragment"
              android:layout_centerHorizontal="true"
              android:text="Sat dolaska"
              android:textColor="@color/gray_dark" />

      </RelativeLayout>

      <RelativeLayout
          android:id="@+id/relativeLayoutDepartureHourGuestRegistrationFragment"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_weight="1"

          android:paddingBottom="@dimen/padding5dp"
          android:paddingTop="@dimen/padding5dp">

          <TextView
              android:id="@+id/textViewDepartureHourGuestRegistrationFragment"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerHorizontal="true"
              android:text="14:00"
              android:textSize="22dp" />

          <TextView
              android:id="@+id/textViewLabelDepartureHourGuestRegistrationFragment"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_below="@id/textViewDepartureHourGuestRegistrationFragment"
              android:layout_centerHorizontal="true"
              android:text="Sat odlaska"
              android:textColor="@color/gray_dark" />
      </RelativeLayout>


  </LinearLayout>

  <TextView
      android:id="@+id/guestsRegisterOnEvisitorLabelGuestRegistration"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/linearLayoutHoursGuestRegistrationWrapper"
      android:gravity="center"
      android:paddingTop="24dp"
      android:text="Prijavi goste na eVisitor"
      android:textStyle="bold" />

  <ListView
      android:id="@+id/eVisitorGuestsList"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_below="@id/guestsRegisterOnEvisitorLabelGuestRegistration"
      android:layout_margin="10dp"

      android:layout_marginBottom="10dp"
      android:layout_marginTop="5dp"
      android:background="@color/caldroid_white"
      android:cacheColorHint="@android:color/transparent"
      android:divider="#CCCCCC"
      android:dividerHeight="1dp"
      android:paddingLeft="2dp"></ListView>

  <TextView
      android:id="@+id/newGuestLabelGuestRegistration"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/eVisitorGuestsList"
      android:gravity="center"
      android:paddingTop="24dp"
      android:text="Unos novog gosts"
      android:textStyle="bold" />

  <LinearLayout
      android:id="@+id/scanDocumentLinearLayoutClickWrapper"
      android:layout_width="match_parent"
      android:layout_height="25dp"
      android:layout_alignLeft="@+id/linearLayoutHoursGuestRegistrationWrapper"
      android:layout_alignStart="@+id/linearLayoutHoursGuestRegistrationWrapper"
      android:layout_below="@+id/newGuestLabelGuestRegistration"
      android:layout_marginTop="@dimen/padding10dp">

      <ImageView
          android:id="@+id/imageViewScanCardGuestRegistration"
          android:layout_width="25dp"
          android:layout_height="25dp"
          android:adjustViewBounds="true"
          android:background="@drawable/ic_image_white_48dp"
          android:backgroundTint="#d50000" />

      <TextView
          android:id="@+id/textViewScanCardGuestRegistration"
          android:layout_width="wrap_content"
          android:layout_height="match_parent"
          android:allowUndo="false"
          android:text="Skeniraj osobnu iskaznicu"
          android:textAppearance="?android:attr/textAppearanceMedium"
          android:textColor="#d50000" />
  </LinearLayout>

  <LinearLayout
      android:id="@+id/enterNewGuestLinearLayoutClickWrapper"
      android:layout_width="match_parent"
      android:layout_height="25dp"
      android:layout_alignLeft="@+id/linearLayoutHoursGuestRegistrationWrapper"
      android:layout_alignStart="@+id/linearLayoutHoursGuestRegistrationWrapper"
      android:layout_below="@+id/scanDocumentLinearLayoutClickWrapper"
      android:layout_marginTop="@dimen/padding10dp">

      <ImageView
          android:id="@+id/imageViewEnterGuestRegistration"
          android:layout_width="25dp"
          android:layout_height="25dp"
          android:adjustViewBounds="true"
          android:background="@drawable/ic_create_black_48dp"
          android:backgroundTint="#d50000" />

      <TextView
          android:id="@+id/textViewEnterGuestRegistration"
          android:layout_width="wrap_content"
          android:layout_height="match_parent"
          android:allowUndo="false"
          android:text="Upiši novog gosta"
          android:textAppearance="?android:attr/textAppearanceMedium"
          android:textColor="#d50000" />
  </LinearLayout>

</RelativeLayout>
</ScrollView>

这是我的活动 xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark"
android:fitsSystemWindows="true">

<android.support.design.widget.CoordinatorLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorDirtyGray"
    tools:context=".activities.ReservationsAllActivity">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        tools:context=".activities.ReservationDetailsActivity">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appBarLayoutReservationDetails"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.Toolbar

                android:id="@+id/toolbarReservationDetails"
                android:layout_width="match_parent"
                android:layout_height="50dp"

                android:background="?attr/colorPrimary"
                android:theme="@style/AppTheme.NoActionBar"
                android:titleTextColor="@android:color/white"
                app:popupTheme="@style/AppTheme.NoActionBar"
                tools:title="Rezervacije">

                <TextView
                    android:id="@+id/textViewToolbarReservationDetails"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/caldroid_white"
                    android:textSize="20dp"
                    tools:text="Nova rezervacija" />

                <ProgressBar
                    android:id="@+id/progress_spinner_reservation_details4"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="left"
                    android:indeterminate="true"

                    android:visibility="gone" />

            </android.support.v7.widget.Toolbar>

            <RelativeLayout

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

                <android.support.v4.view.ViewPager
                    android:id="@+id/viewPagerReservationDetails"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <android.support.design.widget.TabLayout
                        android:id="@+id/tabLayoutReservationDetails"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:tabBackground="@color/caldroid_black"
                        app:tabGravity="fill"
                        app:tabMode="fixed"
                        app:tabSelectedTextColor="@color/colorAccent"
                        app:tabTextColor="@color/caldroid_white" />
                </android.support.v4.view.ViewPager>

            </RelativeLayout>


        </android.support.design.widget.AppBarLayout>


    </RelativeLayout>

</android.support.design.widget.CoordinatorLayout>

<include layout="@layout/include_menu_navigation_view"></include>
<!--app:menu="@menu/drawer_view"-->
</android.support.v4.widget.DrawerLayout>

【问题讨论】:

  • 参考这个解决方案:- stackoverflow.com/a/44017731/3946958
  • 用 NestedScrollView 替换滚动视图
  • 没有帮助,我现在可以查看所有内容,除了我的列表视图现在只有一项而不是四项。也许我不能拥有位于 insideviewpager 的nestedscrollview 内的列表视图?
  • 在嵌套滚动视图和列表视图中添加 app:layout_behavior="@string/appbar_scrolling_view_behavior"
  • 和以前一样……

标签: android android-layout


【解决方案1】:

这是解决方案。放置 NestedScrollView 在某种程度上肯定有帮助,但 ListView 只显示一个项目,而其他项目只有在我滚动那一小块 UI(listview)时才可见。所以我决定制作不可滚动的列表视图(因为我想显示它们并且嵌套滚动视图将滚动整个片段)。这是 NonScrollableListView 的代码:

public class NonScrollListView extends ListView {

    public NonScrollListView(Context context) {
        super(context);
    }
    public NonScrollListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }
}

现在列表视图显示所有元素,并且由于 NestedScrollView,片段也是可滚动的。

【讨论】:

    【解决方案2】:

    不要在ScrollView 中使用ListView。使用android.support.v4.widget.NestedScrollView 使其工作。

    试试这个:

    <android.support.v4.widget.NestedScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
        <RelativeLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#EDEDED">
    
           <TextView
              android:id="@+id/guestsLabelGuestRegistration"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:gravity="center"
              android:paddingTop="24dp"
              android:text="Gosti"
              android:textStyle="bold" />
    
          <android.support.design.widget.TextInputLayout
              android:id="@+id/textInputLayoutOfferedService"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_below="@id/guestsLabelGuestRegistration"
    
              android:layout_marginLeft="@dimen/padding10dp"
              android:layout_marginRight="@dimen/padding10dp"
              android:layout_marginTop="@dimen/padding10dp"
              android:background="@color/caldroid_white">
    
          <TextView
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:padding="4dp"
    
              android:text="Vrsta usluge"
              android:textSize="12dp" />
    
          <android.support.v7.widget.AppCompatSpinner
              android:id="@+id/spinnerOfferedService"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:padding="2dp"
    
              android:theme="@style/customSpinnerTheme" />
      </android.support.design.widget.TextInputLayout>
    
      <android.support.design.widget.TextInputLayout
          android:id="@+id/textInputArrivalOrganizations"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_below="@id/textInputLayoutOfferedService"
          android:layout_marginLeft="@dimen/padding10dp"
          android:layout_marginRight="@dimen/padding10dp"
          android:layout_marginTop="@dimen/padding10dp"
          android:background="@color/caldroid_white">
    
          <TextView
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:padding="4dp"
              android:text="Organizacija dolaska"
              android:textSize="12dp" />
    
          <android.support.v7.widget.AppCompatSpinner
              android:id="@+id/spinnerArrivalOrganization"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:clipToPadding="true"
              android:theme="@style/customSpinnerTheme" />
      </android.support.design.widget.TextInputLayout>
    
    
      <LinearLayout
          android:id="@+id/linearLayoutHoursGuestRegistrationWrapper"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_below="@id/textInputArrivalOrganizations"
          android:layout_marginLeft="@dimen/padding10dp"
          android:layout_marginRight="@dimen/padding10dp"
          android:layout_marginTop="@dimen/padding10dp"
          android:background="@color/caldroid_white">
    
          <RelativeLayout
              android:id="@+id/relativeLayoutArrivalHourGuestRegistrationFragment"
              android:layout_width="wrap_content"
    
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:paddingBottom="@dimen/padding5dp"
              android:paddingTop="@dimen/padding5dp">
    
              <TextView
                  android:id="@+id/textViewArrivalHourGuestRegistrationFragment"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_centerHorizontal="true"
                  android:text="10:00"
                  android:textSize="22dp" />
    
              <TextView
                  android:id="@+id/textViewLabelArrivalHourGuestRegistrationFragment"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_below="@id/textViewArrivalHourGuestRegistrationFragment"
                  android:layout_centerHorizontal="true"
                  android:text="Sat dolaska"
                  android:textColor="@color/gray_dark" />
    
          </RelativeLayout>
    
          <RelativeLayout
              android:id="@+id/relativeLayoutDepartureHourGuestRegistrationFragment"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_weight="1"
    
              android:paddingBottom="@dimen/padding5dp"
              android:paddingTop="@dimen/padding5dp">
    
              <TextView
                  android:id="@+id/textViewDepartureHourGuestRegistrationFragment"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_centerHorizontal="true"
                  android:text="14:00"
                  android:textSize="22dp" />
    
              <TextView
                  android:id="@+id/textViewLabelDepartureHourGuestRegistrationFragment"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_below="@id/textViewDepartureHourGuestRegistrationFragment"
                  android:layout_centerHorizontal="true"
                  android:text="Sat odlaska"
                  android:textColor="@color/gray_dark" />
          </RelativeLayout>
    
    
      </LinearLayout>
    
      <TextView
          android:id="@+id/guestsRegisterOnEvisitorLabelGuestRegistration"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_below="@id/linearLayoutHoursGuestRegistrationWrapper"
          android:gravity="center"
          android:paddingTop="24dp"
          android:text="Prijavi goste na eVisitor"
          android:textStyle="bold" />
    
      <ListView
          android:id="@+id/eVisitorGuestsList"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_below="@id/guestsRegisterOnEvisitorLabelGuestRegistration"
          android:layout_margin="10dp"
    
          android:layout_marginBottom="10dp"
          android:layout_marginTop="5dp"
          android:background="@color/caldroid_white"
          android:cacheColorHint="@android:color/transparent"
          android:divider="#CCCCCC"
          android:dividerHeight="1dp"
          android:paddingLeft="2dp"></ListView>
    
      <TextView
          android:id="@+id/newGuestLabelGuestRegistration"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_below="@id/eVisitorGuestsList"
          android:gravity="center"
          android:paddingTop="24dp"
          android:text="Unos novog gosts"
          android:textStyle="bold" />
    
      <LinearLayout
          android:id="@+id/scanDocumentLinearLayoutClickWrapper"
          android:layout_width="match_parent"
          android:layout_height="25dp"
          android:layout_alignLeft="@+id/linearLayoutHoursGuestRegistrationWrapper"
          android:layout_alignStart="@+id/linearLayoutHoursGuestRegistrationWrapper"
          android:layout_below="@+id/newGuestLabelGuestRegistration"
          android:layout_marginTop="@dimen/padding10dp">
    
          <ImageView
              android:id="@+id/imageViewScanCardGuestRegistration"
              android:layout_width="25dp"
              android:layout_height="25dp"
              android:adjustViewBounds="true"
              android:background="@drawable/ic_image_white_48dp"
              android:backgroundTint="#d50000" />
    
          <TextView
              android:id="@+id/textViewScanCardGuestRegistration"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:allowUndo="false"
              android:text="Skeniraj osobnu iskaznicu"
              android:textAppearance="?android:attr/textAppearanceMedium"
              android:textColor="#d50000" />
      </LinearLayout>
    
      <LinearLayout
          android:id="@+id/enterNewGuestLinearLayoutClickWrapper"
          android:layout_width="match_parent"
          android:layout_height="25dp"
          android:layout_alignLeft="@+id/linearLayoutHoursGuestRegistrationWrapper"
          android:layout_alignStart="@+id/linearLayoutHoursGuestRegistrationWrapper"
          android:layout_below="@+id/scanDocumentLinearLayoutClickWrapper"
          android:layout_marginTop="@dimen/padding10dp">
    
          <ImageView
              android:id="@+id/imageViewEnterGuestRegistration"
              android:layout_width="25dp"
              android:layout_height="25dp"
              android:adjustViewBounds="true"
              android:background="@drawable/ic_create_black_48dp"
              android:backgroundTint="#d50000" />
    
          <TextView
              android:id="@+id/textViewEnterGuestRegistration"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:allowUndo="false"
              android:text="Upiši novog gosta"
              android:textAppearance="?android:attr/textAppearanceMedium"
              android:textColor="#d50000" />
      </LinearLayout>
    
    </RelativeLayout>
    </android.support.v4.widget.NestedScrollView>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多