web-dev-qa-db-fra.com

NestedScrollView défiler lui-même lorsque le contenu est rempli

J'ai xml, qui consiste en DrawerLayout, CoordinatorLayout avec custom views, AppBarLayout, NestedScrollView.

Problème: Lorsque le contenu de NestedtScrollView est rempli, NestedtScrollView défile lui-même. Toutes les recherches telles que scrollView.setScrollY(0) ou une classe personnalisée pour layout_behavior = FixedScrollingViewBehavior ne m'ont pas aidé.

Comment puis-je empêcher ce défilement

    <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"/>

mon build.gradle consits

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

compile 'com.Android.support:design:23.0.1'
39
Ognev Zair

Essayez de définir Android:descendantFocusability="blocksDescendants" à LinearLayout à l'intérieur de NestedScrollView. Ça marche pour moi.

UPD: méfiez-vous des éléments descendants de la mise en page, tels que EditText, qui doivent prendre le focus: que les éléments ne prennent pas le focus. Si vous savez comment résoudre ce problème, merci de nous le faire savoir.

157
Konstantin Konopko

Une alternative au blocage du focus consiste à ajouter une nouvelle vue qui volera le focus. Placez-le n'importe où au-dessus de NestedScrollView, et cela devrait fonctionner:

    <!--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"/>
12
android developer

Cela fonctionne pour moi:

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