/var/log/messages

Jul 2, 2015 - 2 minute read - Comments - android

Toolbar Scrolling なサンプル再確認

以下なリポジトリの

ToolBar Scrolling なサンプル再確認な自分メモです。

Activity クラス定義な実装は非常にシンプルでして

  • setContentView
  • Toolbar 取得して ActionBar としての体裁を云々
  • RecyclerView の初期化

程度です。RecyclerView についても

  • setLayoutManager(new LinearLayoutManager(getApplicationContext))
  • 適当なリストを作成
  • SimpleRecyclerAdapter オブジェクト生成して setAdapter

くらいになっています。ここで ToolBar を Scroll 云々な記述は一切無いですね。で、レイアウトな xml が以下になってます。

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coordinator_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- RecyclerViewを使用したところ正常にどうさしなかった v22.0から22.2に変更したら動いた-->
    <!-- スクロールしてもToolBarが動かなかった-->
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/tool_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways"/>

        <!-- 必要であればTabLayoutを追加 -->
        <!--<android.support.design.widget.TabLayout-->
        <!--android:layout_width="match_parent"-->
        <!--android:layout_height="wrap_content"/>-->

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

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

気になるのは

  • RecyclerView の app:layout_behavior
  • Toolbar の app:layout_scrollFlags

あたりなのか。ちなみに app:layout_behavior にアレされている文字列の定義は res 配下には見当りません。また、RecyclerView と AppBarLayout の書く位置逆じゃないか説がありますね。。

CoordinatorLayout

親子関係のない 2 つの View に依存関係を持たせるためのコンポーネント、とのこと。つうかこれって例えばスクロールで FAB を出したり消したり、てソレには応用できないのかな。ただ、Behavior を継承したクラスでよしなに云々してあげれば良いですよ、的な記述も見かけてて上のサンプルでも

android.support.design.widget.AppBarLayout$ScrollingView…

なるクラスが使用されていることは分かります。

色々探しまわってて

以下なポストを発見。

でもこれって単発でしか使えないのかどうか。RecyclerView に複数の app:layout_behavior は書けないようなのですがこれはどうしたものか。

つうか以下な diff って FAB が小さくなってなくなるアニメなのかな。