2

Я пытаюсь развернуть CollapseingToolbarLayout, когда произошло определенное количество прокрутки и прокрутка закончилась.Как использовать CollapsingToolbarLayout иметь только 2 позиции, развернуто и свернуто после завершения прокрутки

Я получил работу как должен быть, но мне нужна, чтобы панель инструментов была видимой или скрытой, а не полу, поэтому в основном для расширения или сглаживания.

Я попытался найти решение без везения.

Вот как у меня сейчас:

my_activity.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" 
    android:id="@+id/myLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.view.ViewPager 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:padding="0dp" 
     android:layout_margin="0dp" 
     android:id="@+id/myPager"/> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBar" 
     android:layout_width="match_parent" 
     android:layout_height="112dp" 
     android:minHeight="?attr/actionBarSize"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:titleEnabled="false" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

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

      <android.support.design.widget.TabLayout 
       style="@style/AppTheme.TabLayout" 
       android:id="@+id/appTabs" 
       android:scrollbars="horizontal" 
       android:layout_gravity="bottom" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:tabMode="fixed" 
       app:tabGravity="fill" 
       app:layout_scrollFlags="scroll|enterAlways" /> 

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

Если я использую onOffsetChanged, мое приложение зависает, так это причина, это происходит каждый раз при смене прокрутки ?

MyActivity.java

public class MyActivity extends AppCompatActivity { 
    private AppBarLayout appBarLayout; 
    private android.support.v7.app.ActionBar mToolbar; 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_activity); 

     appBarLayout = (AppBarLayout)findViewById(R.id.appBar); 
     mToolbar = getSupportActionBar(); 

     appBarLayout.setExpanded(true); 
     appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { 
      @Override 
      public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { 
       if(verticalOffset == 0 || verticalOffset <= mToolbar.getHeight()) { 
        appBarLayout.setExpanded(false); 
       } else { 
        appBarLayout.setExpanded(true); 
       } 
      } 
     }); 


    } 
} 

ответ

2

Я нашел решение, написать это в AppCompatActivity и адаптирует его к коду:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    try { 
     AppBarLayout appBarLayout; 
     appBarLayout = ((AppBarLayout) findViewById(R.id.layout_toolbar)); 
     if (ev.getAction() == ev.ACTION_UP) { 
      if ((collapsingToolbarLayout.getBottom() - collapsingToolbarLayout.getTop()) > appBarLayout.getBottom() * 2) { 
       appBarLayout.setExpanded(false); 
      } else { 
       appBarLayout.setExpanded(true); 
      } 
     } 
     return super.dispatchTouchEvent(ev); 
    } catch (Exception e) { 
     Log.e(TAG, "dispatchTouchEvent " + e.toString()); 
     return false; 
    } 
} 

Он получает событие ACTION_UP и проверяет только в этом если CollapsingToolbarLayout выше половины его высоты.

Edit: Устаревшая см this response

+0

это довольно близко, что Я ищу, так или иначе, он каждый раз расширяется, независимо от того, si ze разваливающейся высоты панели инструментов. Что будет проблемой? – EspeH

+0

Вы должны удалить множитель в состояние. Выполняя различный тест, я заметил, что в то время как 'AppBarLayout' меньше, чем некоторый размер, ошибка дисплея (153dp для mu Nexus 9 и для 137dp моего Nexus 5). – gouvinb

3

Просто укажите snap ...

app:layout_scrollFlags="exitUntilCollapsed|scroll|snap" 

... внутри определения XML:

<android.support.design.widget.CollapsingToolbarLayout 
    android:id="@+id/collapsing_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:titleEnabled="false" 
    app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">