2016-05-20 13 views
8

Sto avendo uno ScrollView annidato che contiene i contenuti all'interno di un layout lineare.Scorrimento annidato Android Scorrimento non scorrevole

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

Ho questo layout all'interno di un ViewPager e ViewPager è all'interno di un 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"> 

Ora, quando ho scorrere la vista la vista non scorre. Ma dal momento che il layout è posizionato all'interno del layout di Cordinator, il suo spostamento fino alla barra degli strumenti viene nascosto. Ma non sta scorrendo verso l'alto.

Ecco la mia attività principale xml, La visualizzazione del cercapersone è all'interno di un layout a schede.

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

Ecco il mio screenshot,

Vista iniziale enter image description here

Quando vista scorre su, scorre solo per nascondere la barra di navigazione superiore. La sua non lo scorrimento per visualizzare gli elementi sotto la barra delle schede,

enter image description here

+0

non dovrebbe 'Android: layout_height = "match_parent"' in NestedScrool View essere 'Android: layout_height = "wrap_content"' ... e anche nel tuo layout lineare annidato? – longilong

+0

Puoi aggiungere un'immagine di ciò che stai cercando di ottenere? – jobbert

+0

si prega di vedere schermate – Zach

risposta

1

app:layout_behavior="..." deve essere impostato su un figlio diretto di CoordinatorLayout. Se il tuo ViewPager è figlio diretto di CoordinatorLayout, posizionalo sulla dichiarazione ViewPager.

0

Citazione da qui: Troubleshooting Coordinator Layouts

Quando coordinamento tra un frammento con un elenco di elementi all'interno di un ViewPager ed un'attività genitore, si vuole mettere l'app: proprietà layout_behavior sulla ViewPager come outlined here in modo che il le pergamene all'interno del cercapersone sono esplose e possono essere gestite dal CoordinatorLayout. Si noti che non si deve mettere l'app: proprietà layout_behavior in nessun punto all'interno del frammento o nell'elenco all'interno.

0

Puoi provare questo! Ho avuto lo stesso problema con la mia app. Questo ha funzionato per me.

<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

Così qui è il problema, non si può avere un NestedScrollView all'interno del FrameLayout.

Inoltre, in xml sono necessarie altre piccole modifiche per farlo funzionare. Come il TabLayout deve essere all'interno di AppBar Layout ed essere bloccato.

Ecco il codice ->

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

<android.support.design.widget.TabLayout 
android:id="@+id/tabs" 
android:layout_gravity="bottom" 
android:background="@color/offwhite" 
android:layout_width="match_parent" 
app:layout_collapseMode="pin" 
app:layout_anchor="@+id/appbar" 
app:layout_anchorGravity="bottom" 
android:layout_height="wrap_content"/> 

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

E -> Cambia il codice Frammento per rimuovere il layout telaio!

<android.support.v4.widget.NestedScrollView 
    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: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:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     </LinearLayout> 

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

Spero che questo aiuti!

+0

@ Zach I risposta aggiornata si prega di controllare. –

0

provare questo

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

Il ScrollingViewBehavior è sufficiente aggiungere alto e in basso offset per la vostra ViewPager. Generalmente l'offset dipende dall'altezza di AppBarLayout e non dipende dall'altezza TabLayout perché non si trova in AppBarLayout. Così, per soluzione rapida si può solo aggiungere al vostro paddingBottom ViewPager in questo modo:

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