4

Ich habe versucht, ein Coordinator Layout in meiner Android App zu verwenden. Ich habe ein Layout der App-Leiste und eine geschachtelte Bildlaufansicht im Layout des Koordinators. In meiner verschachtelten Scroll-Ansicht habe ich ein lineares Layout mit animateLayoutChanges als true.Android: animateLayoutChanges funktioniert nicht richtig mit CoordinatorLayout

Mein Problem ist, dass, wenn die Höhe der Höhe des linearen Layouts zunimmt, wenn die Elemente Sichtbarkeit als sichtbar machen, das lineare Layout unter Appbar-Layout geht. Erst nach dem Klicken auf den Bildschirm oder dem Scrollen findet der richtige Scroll-Effekt statt.

Ich habe eine einfache Anwendung erstellt, um das Problem zu zeigen. Unten ist das Layout.

<?xml version="1.0" encoding="utf-8"?> 
<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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:animateLayoutChanges="true" 
    tools:context="testapp.test.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBar" 
     android:animateLayoutChanges="true" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:animateLayoutChanges="true" 
      app:layout_scrollFlags="scroll|enterAlways|snap" 
      app:popupTheme="@style/AppTheme.PopupOverlay"> 

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

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

    <android.support.v4.widget.NestedScrollView 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:animateLayoutChanges="true"> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Show" 
      android:id="@+id/test_Button"/> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Hide" 
      android:id="@+id/test_Button2"/> 
     <TextView 
      android:id="@+id/test_tv" 
      android:layout_width="match_parent" 
      android:layout_height="300dp" 
      android:visibility="gone" 
      android:background="@color/colorAccent"/> 
     </LinearLayout> 
    </android.support.v4.widget.NestedScrollView> 

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

In diesem auf den Show-Button klicken Ich mache die Textansicht sichtbar. Bitte sehen Sie sich die Bilder an, um mein Problem zu verstehen.

Bild 1- Ausgangszustand.

Bild 2- Hier ist das Problem. Ich habe auf Anzeigen geklickt. Jetzt hat sich das lineare Layout aufgrund von Animation durch Animation von Layoutänderungen im App-Bar-Layout bewegt. Wie Sie sehen können, wurde die Schaltfläche Anzeigen unter App-Leiste verschoben.

Bild 3- Wenn ich nun den Bildschirm berühre oder blättere, wird das Scrollen richtig.

Bitte helfen. Ich habe versucht, dies seit Tagen zu beheben. Vielen Dank.

Initial State.

Here is the problem. I have clicked Show. Now the Linear layout has moved under App Bar Layout due to animation. Now when I touch screen or scroll, the scrolling becomes proper.

Antwort

5

ich das gleiche Problem erlebt: Ein NestedScrollView ein Linearlayout mit animateLayoutChanges auf true gesetzt enthält, wurde verursacht Scroll-Probleme mit dem Inhalt. In meinem Fall rutschte der Inhalt unter dem appBarLayout.

Dieser Fehler ist hier als issue 180504 dokumentiert. Es scheint, dass dies jetzt von der Support-Bibliothek 23.2.0 behoben wurde, was bedeutet, dass die Aktualisierung zu diesem Zweck den folgenden Trick erfüllen sollte:

ext { 
    supportLibraryVersion = "23.2.0" 
} 

dependencies { 
    ... 

    // this is the primary dependency for coordinator layout 
    // but, of course, update all that depend on the support library 
    // note: the design library depends on the Support v4 and AppCompat Support Libraries 
    //  those will be included automatically when you add the Design library dependency 
    compile "com.android.support:design:$supportLibraryVersion" 

    ... 
} 
+0

Vielen Dank. Es klappt. –

+0

es funktioniert wie ein Charme. Danke – tauri

Verwandte Themen