web-dev-qa-db-ja.com

アンドロイド:ScrollView対NestedScrollView

ScrollViewNestedScrollViewの違いは何ですか?どちらもFrameLayoutを継承しています。両方の長所と短所を詳しく知りたい。

108
Chintan Soni

名前が示すようにNestedScrollViewは、別のスクローリングビュー内にスクローリングビューが必要な場合に使用されます。システムはどのビューをスクロールするかを決定できないため、通常これを実現するのは困難です。

これがNestedScrollViewの出番です。

146
Roshan

ネストされたスクロールNestedScrollViewに加えて、1つの主要な機能が追加されました。これにより、ネストされたコンテキスト以外でも面白くなります:OnScrollChangeListenerのサポートが組み込まれています。 OnScrollChangeListenerを元のScrollViewに追加するAPI 23より下必要なサブクラス化ScrollViewまたは ViewTreeObserverScrollViewをいじる これは、サブクラス化よりもさらに多くの作業を意味します。 NestedScrollViewを使用すると、 build-in setter を使用して実行できます。

24
Fabian Ochmann

NestedScrollView

NestedScrollViewはScrollViewとまったく同じですが、Androidの新バージョンと旧バージョンの両方で、入れ子になったスクロールする親と子の両方として機能することをサポートします。入れ子スクロールはデフォルトで有効になっています。

https://developer.Android.com/reference/Android/support/v4/widget/NestedScrollView.html

ScrollView

ユーザーがスクロールできるビュー階層のレイアウトコンテナ。物理的な表示より大きくすることができます。 ScrollViewはFrameLayoutです。つまり、スクロールする内容全体を含む1つの子を配置する必要があります。この子自体が複雑なオブジェクト階層を持つレイアウトマネージャになる可能性があります。

https://developer.Android.com/reference/Android/widget/ScrollView.html

19
Amit Vaghela

与えられた答えにリストされている利点以外に、ScrollViewに対するNestedScrollViewのもう一つの利点はCoordinatorLayoutとの互換性です。 ScrollViewはCoordinatorLayoutと連携しません。ツールバーの「画面外へのスクロール」動作を実現するには、NestedScrollViewを使用する必要があります。

ツールバーはScrollviewをCoordinatorLayoutの子として折りたたむことはできません

14
Suraj

NestedScrollViewはScrollViewと似ていますが、NestedScrollViewでは他のスクロールビューをその子として置くことができます。 RecyclerView。

しかし、RecyclerViewをNestedScrollView内に配置すると、RecyclerViewのスムーズなスクロールが妨げられます。スムーズなスクロールを取り戻すには、トリックがあります。

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

recyclerView用のアダプターを設定した後に、上記の行を入れてください。

1
Umar Farooq

NestedScrollViewは、スクロール可能なビューを別のスクロール可能なビューの内側に実装するときに使用されるウィジェットです。

リンクをクリックしてレイアウト出力を表示します。 NestedScrollViewの例

 <?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:Android="<a class="vglnk" href="http://schemas.Android.com/apk/res/Android" rel="nofollow"><span>http</span><span>://</span><span>schemas</span><span>.</span><span>Android</span><span>.</span><span>com</span><span>/</span><span>apk</span><span>/</span><span>res</span><span>/</span><span>Android</span></a>"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">


<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="20dp"
    Android:gravity="center"
    Android:orientation="vertical">

    <Android.support.v4.widget.NestedScrollView
        Android:layout_width="match_parent"
        Android:layout_height="100dp"
        Android:layout_margin="20dp"
        Android:background="@Android:color/white"
        Android:padding="10dp">

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

            <TextView
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/nested_scroll_text"/>

        </LinearLayout>

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

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="20dp"
        Android:contentDescription="@string/no_image"
        Android:src="@drawable/guava"/>

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="20dp"
        Android:contentDescription="@string/no_image"
        Android:src="@drawable/jackfruit"/>

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="20dp"
        Android:contentDescription="@string/no_image"
        Android:src="@drawable/mix_fruit"/>

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="20dp"
        Android:contentDescription="@string/no_image"
        Android:src="@drawable/pomegranate"/>

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="20dp"
        Android:contentDescription="@string/no_image"
        Android:src="@drawable/strawberry"/>

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="20dp"
        Android:contentDescription="@string/no_image"
        Android:src="@drawable/zespri_kiwi"/>

</LinearLayout>
0
Aamir Kalimi

Nested Scrollビューを使用する利点の1つは、cooridinatorレイアウトがネストされたスクロールイベントのみをリッスンすることです。元の場合アクティビティのコンテンツをスクロールするときにツールバーを下にスクロールしたい場合、レイアウトでネストされたスクロールビューを使用しているときにのみ下にスクロールします。レイアウトで通常のスクロールビューを使用する場合、ユーザーがコンテンツをスクロールしてもツールバーはスクロールしません。

0