ScrollView
とNestedScrollView
の違いは何ですか?どちらもFrameLayout
を継承しています。両方の長所と短所を詳しく知りたい。
名前が示すようにNestedScrollView
は、別のスクローリングビュー内にスクローリングビューが必要な場合に使用されます。システムはどのビューをスクロールするかを決定できないため、通常これを実現するのは困難です。
これがNestedScrollView
の出番です。
ネストされたスクロールNestedScrollView
に加えて、1つの主要な機能が追加されました。これにより、ネストされたコンテキスト以外でも面白くなります:OnScrollChangeListener
のサポートが組み込まれています。 OnScrollChangeListener
を元のScrollView
に追加するAPI 23より下必要なサブクラス化ScrollView
または ViewTreeObserver
のScrollView
をいじる これは、サブクラス化よりもさらに多くの作業を意味します。 NestedScrollView
を使用すると、 build-in setter を使用して実行できます。
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
与えられた答えにリストされている利点以外に、ScrollViewに対するNestedScrollViewのもう一つの利点はCoordinatorLayoutとの互換性です。 ScrollViewはCoordinatorLayoutと連携しません。ツールバーの「画面外へのスクロール」動作を実現するには、NestedScrollViewを使用する必要があります。
NestedScrollViewはScrollViewと似ていますが、NestedScrollViewでは他のスクロールビューをその子として置くことができます。 RecyclerView。
しかし、RecyclerViewをNestedScrollView内に配置すると、RecyclerViewのスムーズなスクロールが妨げられます。スムーズなスクロールを取り戻すには、トリックがあります。
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
recyclerView用のアダプターを設定した後に、上記の行を入れてください。
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>
Nested Scrollビューを使用する利点の1つは、cooridinatorレイアウトがネストされたスクロールイベントのみをリッスンすることです。元の場合アクティビティのコンテンツをスクロールするときにツールバーを下にスクロールしたい場合、レイアウトでネストされたスクロールビューを使用しているときにのみ下にスクロールします。レイアウトで通常のスクロールビューを使用する場合、ユーザーがコンテンツをスクロールしてもツールバーはスクロールしません。