NestedScrollView의 ViewPager 종류의 뷰 그룹을 가지고 놀았지만 ..

접히는 헤더 (수직 스크롤) 위에 일종의 ViewPager (수평 스크롤) 인 Google 뉴스 스탠드와 같은 인터페이스를 만들어야합니다. 내 요구 사항 중 하나는 Google IO 2015에 제시된 새로운 디자인 지원 라이브러리를 사용하는 것입니다. ( http://android-developers.blogspot.ca/2015/05/android-design-support-library.html )

Chris Banes ( https://github.com/chrisbanes/cheesesquare )가 만든 샘플을 기반으로 축소 동작을 수행 할 수 있지만 기본 LinearLayout (가로 스크롤 없음)을 사용하는 지점에 도달했습니다.

LinearLayout을 ViewPager로 바꾸려고했는데 빈 화면이 생겼습니다. 나는 너비, 무게 및 모든 종류의 뷰 그룹을 가지고 놀았지만 .. 여전히 빈 화면입니다. ViewPager와 NestedScrollView가 서로를 좋아하지 않는 것 같습니다.

HorizontalScrollView를 사용하여 해결 방법을 시도했습니다. 작동하지만 PagerTitleStrip 기능의 이점과 단일 패널에 대한 초점을 잃어 버렸습니다 (두 패널 사이에서 가로로 중지 할 수 있음).

이제 더 이상 아이디어가 없습니다. 누군가 나를 해결책으로 이끌 수 있다면 …

감사

다음은 내 최신 레이아웃 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/header_height"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <include
                layout="@layout/part_header"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_collapseMode="parallax"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/activity_main_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

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

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/activity_main_nestedscrollview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v4.view.ViewPager
            android:id="@+id/activity_main_viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FFA0"/>


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



답변

나는이 문제를 만난다. setFillViewport (true)

<android.support.v4.widget.NestedScrollView
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:id="@+id/nest_scrollview"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="mio.kon.yyb.nestedscrollviewbug.ScrollingActivity"
tools:showIn="@layout/activity_scrolling">


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

활동 중

  NestedScrollView scrollView = (NestedScrollView) findViewById (R.id.nest_scrollview);
    scrollView.setFillViewport (true);

여기에 이미지 설명 입력


답변

좋아요, 저는 ViewPagerNestedScrollView. 내가 직면 한 문제는 높이 ViewPagerListView. 그래서 나는에 약간 수정했다 ListViewViewPager's높이 측정합니다.

누군가 코드를 살펴보고 싶다면 여기 링크가 있습니다 : https://github.com/TheLittleNaruto/SupportDesignExample/

산출:

여기에 이미지 설명 입력


답변

추가 android:fillViewport="true"귀하에 NestedScrollView. 기간.


답변

NestedScrollView 내부에 ViewPager를 배치하는 대신 다른 방법으로 수행하십시오.

본질적으로 Fragment의 레이아웃 인 ViewPager 내의 자식 뷰에 NestedScrollView를 배치합니다. 또한 Fragment의 목록 레이아웃이 매우 간단한 경우 NestedScrollView를 사용할 필요가 없을 가능성이 매우 높습니다.

예제 레이아웃

활동의 레이아웃 :

<?xml version="1.0" encoding="utf-8"?>
<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:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="@dimen/app_bar_height"
                android:scaleType="centerCrop"
                android:src="@drawable/my_bg"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.8"
                app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

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

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>

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

TabLayout이 필요하지 않은 경우 LinearLayout을 버리고 ViewPager를 독립형으로 만들 수 있습니다. 그러나 app:layout_behavior="@string/appbar_scrolling_view_behavior"ViewPager 속성에서 사용해야 합니다.

간단한 조각의 레이아웃 :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

복잡한 조각의 레이아웃 :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillViewport="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Hello World"/>
    </RelativeLayout>
</android.support.v4.widget.NestedScrollView>

예제 앱 : CollapsingToolbarPoc

여기에 이미지 설명 입력


답변

같은 문제가있었습니다.

ViewPager 주위 에 NestedScrollView를 배치하면 작동하지 않습니다.

그래도 작동하는 것은 NestedScrollView를 ViewPager 내부에서로드하는 조각의 레이아웃 안에 넣는 것 입니다.

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@id/fragment_detail"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="fill_vertical"
            android:orientation="vertical">
    ...Content...
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>



답변

이렇게 시도 할 수 있습니다. viewpager는 잘 작동하지만 viewpager의 높이는 고정되어 있습니다.

나는 여전히 더 나은 해결책을 찾고 있습니다. 그래서 어떤 점이 더 잘할 수 있는지 알려주십시오.

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="800dp"
        android:orientation="vertical">

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"/>
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>


답변

나는 같은 문제가 있었고 몇 가지 변경 사항으로 수정했습니다. ViewPager내에서 작동하지 않습니다 NestedScrollView. 간단히 ViewPager귀하의 CoordinatorLayout. 그런 다음 각 ViewPager의 Fragment에 대한 콘텐츠를 NestedScrollView. 그게 다야.