접히는 헤더 (수직 스크롤) 위에 일종의 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);
답변
좋아요, 저는 ViewPager
및 NestedScrollView
. 내가 직면 한 문제는 높이 ViewPager
와 ListView
. 그래서 나는에 약간 수정했다 ListView
및 ViewPager'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
. 그게 다야.