2

我試圖讓CollapsingToolbarLayout在滾動發生一定量並滾動結束時展開/摺疊。如何使用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比它高度的一半還要高。

編輯:過時,看到this response

+0

這是非常接近了什麼我在尋找,不知何故,它每次都會擴展真實,無論si摺疊工具欄高度。會有什麼問題? – EspeH

+0

您必須刪除該條件的乘數。 通過執行不同的測試,我注意到'AppBarLayout'小於一些尺寸的顯示錯誤(mu Nexus 9 153dp和我的Nexus 5 137dp)。 – 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">