1

Я использую последнюю версию библиотеки поддержки дизайна (23.1.1), и я столкнулся с проблемой, когда я использую CollapsingToolbarLayout с флагом прокрутки enterAlways. В основном, когда вы прокручиваете резервную копию, появляется представление, но также оставляет пустое пустое место сверху.Android-дизайн библиотеки AppBar прокрутки поведение enterAlways

Обычный вид:

Normal Image view

После прокрутки вниз, а затем обратно вверх (обратите внимание на пробел ниже строке состояния): enter image description here

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    AppBarLayout appBar; 
    View expandedView; 
    Toolbar toolbar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     setTitle(""); 

     initViews(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 


    private void initViews() { 
     appBar = (AppBarLayout) findViewById(R.id.appBar); 
     appBar.addOnOffsetChangedListener(appBarOffsetChangedListener); 

     expandedView = findViewById(R.id.expandedView); 

     RecyclerView rv = (RecyclerView) findViewById(R.id.rv); 
     rv.setLayoutManager(new LinearLayoutManager(this)); 
     rv.setAdapter(new DummyAdapter()); 
    } 

    private AppBarLayout.OnOffsetChangedListener appBarOffsetChangedListener = new AppBarLayout.OnOffsetChangedListener() { 
     @Override 
     public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { 
      int maxOffset = appBar.getTotalScrollRange(); 
      verticalOffset = Math.abs(verticalOffset); 
      if(verticalOffset > maxOffset) 
       return; 
      float percentage = verticalOffset/(float) maxOffset; 

      if(expandedView!=null) 
       expandedView.setAlpha(1 - percentage); 
     } 
    }; 
} 

activity_main.xml

<?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:fitsSystemWindows="true" 
    tools:context="com.media2359.fragmenttoolbarchange.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBar" 
     android:layout_width="match_parent" 
     android:layout_height="180dp" 
     android:background="@color/colorPrimaryDark" 
     android:fitsSystemWindows="true"> 

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

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin"> 

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

      <RelativeLayout 
       android:id="@+id/expandedView" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:gravity="center_vertical" 
       android:paddingLeft="@dimen/toolbar_text_margin_left" 
       android:paddingTop="@dimen/toolbar_text_margin_top" 
       tools:background="@color/colorPrimaryDark"> 

       <TextView 
        android:id="@+id/tvName" 
        style="@style/TextAppearance.AppCompat.Headline" 
        android:layout_width="@dimen/toolbar_text_width" 
        android:layout_height="wrap_content" 
        android:text="Hello" /> 

       <TextView 
        android:id="@+id/tvTime" 
        style="@style/TextAppearance.AppCompat.Body1" 
        android:layout_width="@dimen/toolbar_text_width" 
        android:layout_height="wrap_content" 
        android:layout_below="@id/tvName" 
        android:layout_marginTop="7dp" 
        android:text="04 Feb, Tuesday evening" /> 

      </RelativeLayout> 

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

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

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:listitem="@layout/item_dummy" /> 
</android.support.design.widget.CoordinatorLayout> 

Использование enterAlwaysCollapsed вместе с enterAlways избегает этой проблемы, но я хочу, чтобы полное представление вернуться, потому что в самом приложении, расширенный раздел путь меньше.

Другое, что я заметил, это то, что высота пробела равна высоте панели инструментов.

EDIT 1

я заменил exitUntilCollapsed с snap и тогда не было белое пространство, а затем на панели инструментов не прикалывает и прокручивается расстояние

EDIT 2

Looks например, это проблема с Библиотекой дизайна: CollapsingToolbarLayout enterAlways not supported

Temp orary Обход: Cheesesquare: enterAlways produces wrong layout

ответ

1

Возможно, это потому, что:

enterAlways 

С КОТОРЫМИ codepath/android_guides говорит:

enterAlways: взгляд будет виден при прокрутке. Этот флаг полезен в случаях, когда прокрутка снизу списка и , желающих открыть панель инструментов сразу же после прокрутки.

Может быть, вы хотите попробовать это: (стандартный способ)

app:layout_scrollFlags="scroll|exitUntilCollapsed" 

Честно говоря, я не видел, кто-то использует enterAlways в CollapsingToolbarLayout в моей жизни развития.В частности, с этими двумя флагами:

app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlways" 

В противном случае, это может быть ошибка и нуждается в штабы Google «s ответить об этом.

+0

Но это именно то, чего я пытаюсь достичь, «разоблачить панель инструментов, как только прокрутка произойдет». Я не знаю, почему это проблема, чтобы использовать три из них вместе. 'прокрутить ', чтобы просить прокрутить' exitUntilCollapsed', чтобы всегда держать панель в поле зрения – Saurabh

+0

Я вижу, но что случилось, когда вы пробовали эти два ?: 'прокрутить | exitUntilCollapsed' те же результаты? Я сказал, что потому, что нет реализации этих трех флагов. – Mohsen

+0

, как и ожидалось, что отключает быстрый возврат, т. Е. Представление возвращается только после прокрутки назад до верхней части списка. – Saurabh