web-dev-qa-db-ja.com

NestedScrollViewは、コンテンツがいっぱいになったときにスクロールダウンします

DrawerLayoutCoordinatorLayoutと_custom views_、AppBarLayoutNestedScrollViewで構成されるxmlがあります。

問題:NestedtScrollViewのコンテンツがいっぱいになると、NestedtScrollViewがスクロールダウンします。 scrollView.setScrollY(0)や_layout_behavior = FixedScrollingViewBehavior_のカスタムクラスなどのすべての研究は役に立たなかった。

このスクロールを防ぐ方法

_    <Android.support.v4.widget.DrawerLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/drawer"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">


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

    <Android.support.design.widget.CoordinatorLayout
            xmlns:Android="http://schemas.Android.com/apk/res/Android"
            xmlns:app="http://schemas.Android.com/apk/res-auto"
            Android:id="@+id/main_content"
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_weight="1">

        <Android.support.design.widget.AppBarLayout
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:fitsSystemWindows="true"
                Android:background="@color/semitransparet_color_primary">

            <Android.support.v7.widget.Toolbar
                    xmlns:Android="http://schemas.Android.com/apk/res/Android"
                    xmlns:app="http://schemas.Android.com/apk/res-auto"
                    Android:id="@+id/actionbar_toolbar"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:minHeight="?attr/actionBarSize"
                    app:layout_scrollFlags="scroll|enterAlways"
                    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                    app:elevation="4dp"/>

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

        <ProgressBar
                Android:id="@+id/progress"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_gravity="center"/>
        <Android.support.v4.widget.NestedScrollView
                Android:id="@+id/product_scroll_wrpr"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:visibility="gone">

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

                // my content is here

            </LinearLayout>


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



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

    <LinearLayout
            Android:id="@+id/buttons_bar"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:visibility="gone"
            Android:background="#01579B"
            Android:layout_gravity="bottom"
            Android:orientation="horizontal"
            Android:padding="8dp"
            Android:gravity="center_vertical">

    // here are my buttons

</LinearLayout>

<Android.support.design.widget.NavigationView
        Android:id="@+id/navi"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:fitsSystemWindows="true"
        Android:background="@Android:color/white"
        app:headerLayout="@layout/drawer_header_left"
        app:menu="@menu/nav_drawer_menu"/>
_

my build.gradle consits

_compile 'com.Android.support:support-v4:23.1.0'

compile 'com.Android.support:design:23.0.1'
_
50
Ognev Zair

Android:descendantFocusability="blocksDescendants"LinearLayout内のNestedScrollViewに設定してみてください。わたしにはできる。

PD:EditTextのようなレイアウトの子孫要素を使用することに注意してください。これはフォーカスを取得する必要があります。その要素はフォーカスを取得しません。これを解決する方法を知っている場合は、お知らせください。

180

フォーカスをブロックする代わりに、フォーカスを盗む新しいビューを追加します。 NestedScrollViewの上の任意の場所に配置すると、動作するはずです。

    <!--focusStealer, to avoid NestedScrollingView to scroll due to dynamically created views that take the focus-->
    <View
        Android:layout_width="0px" Android:layout_height="0px" Android:focusable="true"
        Android:focusableInTouchMode="true"/>
15

これは私のために働いています:

mNestedScrollViewChat.post(new Runnable(){
    @Override
    public void run(){
        mNestedScrollViewChat.fullScroll(View.FOCUS_DOWN);
    }
});
3
Hits sapra