6

Я обновил библиотеку поддержки Android от 23.1.1 к 23.2.1 и AppBarLayoutsetExpanded метода больше не работают, как раньше.Проблемы с библиотекой Поддержки Android 23.2.1 AppBarLayout setExpanded

У меня есть CollapsingToolbarLayout, который занимает весь экран, а под ним находится NestedScrollView, удерживая другие виды. Прокрутка вверх и вниз полностью сворачивает/расширяет макет панели инструментов, тем самым отображая или скрывая просмотр прокрутки с содержимым.

Ручной контроль работает отлично, но у меня также есть кнопка, которая запускает AppBarLayoutsetExpanded с параметрами true/false, чтобы автоматически свернуть/развернуть панель инструментов. С версией 23.1.1 этот метод также работает правильно, но с 23.2.1 только первый сбой панели инструментов отобразит содержимое ниже прокрутки, все последующие сваливания не будут. Triggering setExpanded(true) метод, когда панель инструментов рушится, покажет содержимое моего представления прокрутки, а расширяющаяся анимация будет работать так, как она должна работать.

Проблема может быть воспроизведена на устройствах/эмуляторах с API 22 и ниже.

Любые идеи, как я могу исправить это поведение в библиотеке 23.2.1?


Базовый пример, который демонстрирует выше поведение:

MainActivity.java

package com.test.displaym; 

import android.support.design.widget.AppBarLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 

public class MainActivity extends AppCompatActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void btnClick(View v) 
    { 
     View iv = findViewById(R.id.image_view); 
     AppBarLayout bar = (AppBarLayout) findViewById(R.id.app_bar); 

     if (iv.getTop() == 0) bar.setExpanded(false); 
     else bar.setExpanded(true); 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.test.displaym.MainActivity"> 

    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     > 

     <android.support.design.widget.AppBarLayout 
      android:id="@+id/app_bar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      > 

      <android.support.design.widget.CollapsingToolbarLayout 
       android:id="@+id/toolbar_layout" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:fitsSystemWindows="true" 
       app:contentScrim="@color/colorPrimary" 
       app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

       <ImageView 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:id="@+id/image_view" 
        android:layout_alignParentLeft="true" 
        android:layout_alignParentStart="true" 
        android:fitsSystemWindows="true" 
        android:scaleType="centerCrop" 
        app:layout_collapseMode="parallax"/> 

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

     <android.support.v4.widget.NestedScrollView 
      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/page_scroll" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

      <TextView android:id="@+id/page" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text = "Some text\n12345\n" 
         android:orientation="vertical"> 
      </TextView> 
     </android.support.v4.widget.NestedScrollView> 

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

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Scroll" 
     android:id="@+id/button" 
     android:onClick="btnClick" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true"/> 

</RelativeLayout> 

build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "com.test.displaym" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.2.1' 
    compile 'com.android.support:design:23.2.1' 
    compile 'com.android.support:support-v4:23.2.1' 
} 

Остальные файлы проекта являются так же, как и в базовом проекте Android студии с пустой деятельности.

  • Снимки экрана правильного поведения - текст должен быть видимым все время во время разворачивания/расширения анимации, запускаемой с помощью кнопки SCROLL. Он не должен отображаться только тогда, когда панель инструментов (синяя область) полностью закрывает экран.

enter image description here

  • снимок экрана битого поведения - текст не виден во время панели инструментов разрушающейся анимации, вызванной SCROLL кнопки.

enter image description here

Красная стрелка на экране выше снимков показывает область экрана, которая должна соблюдаться.

+0

Аналогичная проблема возникает в библиотеке поддержки 23.3.0. Сообщается как https://code.google.com/p/android/issues/detail?id=205960 –

+0

Как ни странно, отключить анимацию setExpanded ('bar.setExpanded (false, false)'), кажется, работает правильно. Таким образом, проблема/ошибка, вероятно, находится в коде анимации библиотеки поддержки (?). – Sevle

+0

@ Sevle Это было бы правильным наблюдением. Тем не менее, это мало помогает, поскольку эффект анимации - вот что я здесь: –

ответ

-1

Что-то изменилось в отношении fitsSystemWindows.

Удалить этот атрибут из AppBarLayout и CollapsingToolbarLayout.

Оставьте только в координатореLayout.

+0

Спасибо, но это не решает мою проблему. –

-1

удалить все

андроид: fitsSystemWindows = "истинный"

на ребенка макете и только Родитель RelativeLayout имеет его.

и редактировать CollapsingToolbarLayout к:

  <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/toolbar_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="@color/colorPrimary" 
      app:layout_scrollFlags="scroll|snap|enterAlways"> 

Надеется, что это помощь!

+0

Спасибо, но это не решит проблему прокрутки контента. Также флаги 'snap | enterAlways' резко изменяют поведение прокрутки таким образом, который не соответствует моей цели. –