方法
android.support.design.widget.CollapsingToolbarLayoutのapp:layout_scrollFlags属性をJavaコード中で変更する. 実際には、以下のように行う.import android.support.design.widget.AppBarLayout; import android.support.design.widget.CollapsingToolbarLayout; ... CollapsingToolbarLayout collapsingToolbarLayout = findViewById(R.id.collapsingToolbarLayout); AppBarLayout.LayoutParams appBarLayoutParams = (AppBarLayout.LayoutParams)collapsingToolbarLayout.getLayoutParams(); appBarLayoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); toolbarLayout.setLayoutParams(appBarLayoutParams);setScrollFlagsメソッドに代入する定数は以下の通りで, 複数指定したい場合は, 上のコードのようにビット演算子OR|をはさんでやる.
定数 | 対応するapp:layout_scrollFlagsの値 |
SCROLL_FLAG_ENTER_ALWAYS | enterAlways |
SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED | enterAlwaysCollapsed |
SCROLL_FLAG_SCROLL | scroll |
SCROLL_FLAG_EXIT_UNTIL_COLLAPSED | exitUntilCollapsed |
SCROLL_FLAG_SNAP | snap |
実装例
FloatingActionButtonを押すことで, Toolbarの挙動をenterAlways <-> scroll|exitUntilCollapsedと相互に変える. 以下のような感じ.styles.xml
ToolBarをつかうので, アプリケーションテーマとしてNoActionBarを採用している.
また, 11行目から13行目, 15行目から18行目は, ToolBarのタイトル文字がデフォルトでは黒色なので, 見やすい白色にするために追加している(後に, activity_main.xmlのCollaspingToolbarLayoutのapp:collapsedTitleTextAppearance, app:expandedTitleTextAppearanceで指定してやる).
activity_main.xml
styles.xmlで述べたが, 17行目と19行目でToolBarのタイトルのテキストスタイルを変更している
54行目に出てくる, FloatingActionButtonに使うdrawableリソースはここには載せないが, 適当な画像を使えばよい.
MainActivity.java
ハイライトしたところで, Toolbarの挙動を変更している.
基本的に, statusで現在の状態を管理している. 詳しい説明は, コード中のコメントを参照.
実装例の最初に挙げたgifを見て気づいた方もいるかもしれないが, このコードの問題として, AppBarLayouのheightをwrap_contentか, あまり大きくない値を指定するとタイトルが表示されないことが挙げられる(Toolbarのapp:titleを設定してないことは関係ない!). この問題は, CollapsingToolbarLayoutを使わないようにすれば回避できる:
しかし, この方法では, Toolbarの挙動をJavaコード中では変えられないっぽく, 自作のカスタムViewを作る等面倒なことをしないといけないみたい(? 現在模索中)
0 件のコメント:
コメントを投稿