web-dev-qa-db-ja.com

AndroidネストされたScrollviewがスクロールしない

線形レイアウト内のコンテンツを含むネストされたScrollViewがあります。

 <FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:CoverFlowPager="http://schemas.Android.com/apk/res-auto"
    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.support.v4.widget.NestedScrollView
        Android:id="@+id/scroll"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_marginTop="10dp"
        Android:clipToPadding="false"
        Android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            Android:orientation="vertical"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">
        </LinearLayout>

    </Android.support.v4.widget.NestedScrollView>

</FrameLayout>

このレイアウトはViewPager内にあり、ViewPagerはCordinatorLayout内にあります。

<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:id="@+id/main_content"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">

ビューをスクロールしても、ビューはスクロールしません。ただし、レイアウトはコーディネーターレイアウト内に配置されるため、ツールバーが非表示になるまで上に移動します。しかし、それは上にスクロールしません。

これが私のメインアクティビティxmlです。ビューページャーはタブ付きレイアウト内にあります。

<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:id="@+id/main_content"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/AppTheme.AppBarOverlay">

           <Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
                xmlns:app="http://schemas.Android.com/apk/res-auto"
                xmlns:attrs="http://schemas.Android.com/apk/res-auto"
                Android:id="@+id/toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                Android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/AppTheme.PopupOverlay">

            <FrameLayout
                Android:id="@+id/titleContainer"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:layout_gravity="center"    
                Android:gravity="center">

                <com.CustomFontTextView
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:gravity="center"
                    Android:text="Toolbar Title"
                    Android:textColor="#ffffff"
                    attrs:customFont="handyman_bold"
                    Android:textSize="8pt"
                    Android:layout_marginLeft="-20dp"
                    Android:id="@+id/toolbar_title"/>
            </FrameLayout>

            <ImageButton
                Android:id="@+id/btn_ToolBarRightBtn"
                Android:layout_width="32dp"
                Android:layout_height="28dp"
                Android:tag="0"
                Android:background="@null"
                Android:scaleType="fitXY"
                Android:src="@drawable/icon_shopping"
                Android:layout_alignParentRight="true"
                Android:layout_gravity="right"
                Android:layout_marginRight="10dp"
                />   

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

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

    <Android.support.v4.view.ViewPager
        Android:id="@+id/container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    <Android.support.design.widget.TabLayout
        Android:id="@+id/tabs"
        Android:layout_gravity="bottom"
        Android:background="@color/offwhite"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"/>

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

これが私のスクリーンショットです、

初期ビュー enter image description here

ビューを上にスクロールすると、上部のナビゲーションバーを非表示にするためだけにスクロールします。タブバーの下にアイテムを表示するためにスクロールしない、

enter image description here

9
Zach

app:layout_behavior="..."は、CoordinatorLayoutの直接の子に設定する必要があります。 ViewPagerがCoordinatorLayoutの直接の子である場合は、それをViewPager宣言に配置します。

1
Artem Ufimtcev

ここからの引用: コーディネーターレイアウトのトラブルシューティング

ViewPager内のアイテムのリストを含むフラグメントと親アクティビティを調整する場合、app:layout_behaviorプロパティをViewPagerに ここで概説 として配置して、ページャー内のスクロールがバブルアップされるようにします。 CoordinatorLayoutで管理できます。そのapp:layout_behaviorプロパティをフラグメントまたはリスト内のどこにも配置しないように注意してください。

0
Adam Kimi

これを試して

scroll.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.getParent().requestDisallowInterceptTouchEvent(true);
        return false;
    }
});
0
pratik

あなたはこれを試すことができます!私は自分のアプリで同じ問題を抱えていました。これは私のために働いた。

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/AppTheme.AppBarOverlay">


    <Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        xmlns:attrs="http://schemas.Android.com/apk/res-auto"
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/AppTheme.PopupOverlay">

        <FrameLayout
            Android:id="@+id/titleContainer"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center"

            Android:gravity="center">

            <com.CustomFontTextView
                Android:id="@+id/toolbar_title"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:layout_marginLeft="-20dp"
                Android:gravity="center"
                Android:text="Toolbar Title"
                Android:textColor="#ffffff"
                Android:textSize="8pt"
                attrs:customFont="handyman_bold" />
        </FrameLayout>

        <ImageButton
            Android:id="@+id/btn_ToolBarRightBtn"
            Android:layout_width="32dp"
            Android:layout_height="28dp"
            Android:layout_alignParentRight="true"
            Android:layout_gravity="right"
            Android:layout_marginRight="10dp"
            Android:background="@null"
            Android:scaleType="fitXY"
            Android:src="@drawable/icon_shopping"
            Android:tag="0" />


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

</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/tabs"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="bottom"
        Android:background="@color/offwhite" />


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


</LinearLayout>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<Android.support.v4.widget.NestedScrollView
    Android:id="@+id/scroll"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginTop="10dp"
    Android:clipToPadding="false"
    Android:fillViewport="true">


    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical"></LinearLayout>
</Android.support.v4.widget.NestedScrollView>
0
tintin21

ScrollingViewBehavior は、ViewPagerに上下のオフセットを追加するだけです。通常、オフセットはAppBarLayoutの高さに依存し、AppBarLayoutにないため、TabLayoutの高さに依存しません。したがって、迅速な回避策として、次のようにViewPagerにpaddingBottomを追加することができます。

<Android.support.v4.view.ViewPager
        Android:id="@+id/container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:paddingBottom="50dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    <Android.support.design.widget.TabLayout
        Android:id="@+id/tabs"
        Android:layout_gravity="bottom"
        Android:background="@Android:color/black"
        Android:layout_width="match_parent"
        Android:layout_height="50dp"/>
0
Zellius