web-dev-qa-db-ja.com

app:layout_scrollFlagsをプログラムでツールバーに設定する方法

私のアプリにはビューページャーと4つのタブがあり、各タブには多くのフラグメントがあります。ただし、2つの特定のタブでrecyclerviewをスクロールしながら、ツールバーを上下にスクロールするだけです。しかし、他のタブのツールバースクロールをブロックする方法がわかりません。各フラグメントのツールバーをインポートしようとしましたが、実行できないようです。この問題を解決するアイデアはありますか?

55
Hoang Ha

選択されているタブに基づいてスクロールフラグを変更しないことを強くお勧めします-非リサイクラビュータブへのスクロール時にツールバーが自動的に戻る(およびコンテンツが下に移動する)ことは、非常に不快で、おそらく必要な相互作用パターンではありません( 2つのRecyclerViewタブが隣り合っている場合は腹が立ちます)。

ただし、実際に見たい場合は、 setScrollFlags() を使用して、プログラムでスクロールフラグを設定できます。

Toolbar toolbar = ... // your toolbar within an AppBarLayout
AppBarLayout.LayoutParams params = 
    (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
    | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);

フラグをクリアするには

params.setScrollFlags(0)
113
ianhanniballake
// Show toolbar when we are in maps mode
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams();
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
if(isMapIndex) {
    params.setScrollFlags(0);
    appBarLayoutParams.setBehavior(null);
    mAppBarLayout.setLayoutParams(appBarLayoutParams);
} else {
    params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
    appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
    mAppBarLayout.setLayoutParams(appBarLayoutParams);
}
10
Denny Weinberg