/var/log/messages

debugging with sixth sense

Android Design Support Library について (2)

以下なリポジトリから clone して中身を云々してみます。

Navigation View

Navigation Drawer というヤツですね。レイアウトを以下に引用します。

  • DrawerLayout で全体が囲まれているのはこれまで同様
  • Toolbar 使ってますね
  • Drawer は NavigationView というソレを使う模様
  • app:headerLayout でヘッダのレイアウト指定らしい
  • app:itemIconTint は icon の tint color 指定とのこと
  • app:itemTextColor は text color 指定とのこと
  • app:menu で NavigationItem 指定とのこと
  • NavigationItem は checked という属性がある (初期選択の指定)

onCreate のみ以下に。

  • onNavigationItemSelected メソドの引数 MenuItem から選択された項目を getItemId で取り出す
  • DrawerLayout#closeDrawer というメソドがあるのか
  • MenuItem#setChecked というメソドがあるのか

ちなみに Toolbar 使うケイスで ActionBar として使う場合の定番も上記引用に入っています。

TextInputLayout

Froating labels for editing text という注釈あり。実装を見てみるに二つめの EditText にエラーを設定して (setErrorEnabled) エラーメッセージを表示したまんまにしているようです (setError)。あとはフォーカスがあたっている EditText (TextInputLayout) に floating label が表示されます。

基本的には EditText を TextInputLayout で wrap しているのみ、ですね。ただ、Floating label は EditText 側の属性になっています。hint という名前の属性です。

Floating Action Button

Gmail アプリの新規作成なボタンのアレ。レイアウトリソースの定義の一部を以下に引用します。

app:fabSize て何かな。つうか app:fabSize に “normal” 指定で app:boarderWidth に “0dp” って指定しないとボタンが丸くならない模様。

Snackbar

onClick が拾える Toast なのか。表示は画面下部限定なのかどうか。コード引用は略しますが、基本的には

  • Toast みたいに make して
  • (必要なら) setAction で View.OnClickListener なオブジェクトとか設定して
  • show で表示

というカンジでした。Snackbar な表示の諸々についてカスタマイズはできるようです。

TabLayout

これ、サンプルだけだとよく分からんな。TabLayout というヤツが Toolbar の下に表示されていてそれだけに見える。onCreate から呼び出される initTabLayout というメソドにて addTab されているのは見えますがそれだけだなぁ。

基本的な使い方は次の項、ということなのかな。

TabLayout (ViewPager)

FragmentPagerAdapter なオブジェクトを TabLayout#setTabsFromPagerAdapter および setupWithViewPager というメソドでナニなさってらっしゃいます。成程、FragmentPagerAdapter なんスか。

あと以下なメソド使って初期設定しています。

  • TabLayout#setTabGravity で文言全部出せ、なのかどうか
  • TabLayout#setTabMode で TabLayout.MODE_SCROLLABLE 指定

CoordinatorLayout

CoordinatorLayout (Floating action Button scrolling)

ちなみに Floating Action Button は FAB って略する模様。で、この例ですが onCreate にて

mLayout = (CoordinatorLayout) findViewById(R.id.coordinator_layout);

てしてて Snackbar 作る時にこれを引数として渡しています。

Snackbar snackbar = Snackbar.make(mLayout, "Test", Snackbar.LENGTH_SHORT).

ちなみに CoordinatorLayout ですがレイアウト全体をこれで wrap しています。

CoordinatorLayout (Toolbar Scrolling)

これ、こないだどハマッたアレだったりしますね。つうか、ぱっと見何がどうなっているかが分からない。レイアウトが以下になってて

  • 全体が CoordinatorLayout で wrap されている
  • まず RecyclerView が定義されている
  • 愚痴に AppBarLayout で wrap された Toolbar (必要であれば TabLayout) が定義

というカンジになっています。で、表示な実装としては以下のみ、というカンジになってまして

とりあえず LinearLayoutManager て何なのか。別途確認します。あと RecyclerView.Adapter というあたりも確認必要ですね。おそらく今後はリスト表示にこれが使われるケイスが増えるはず。

RecyclerView.Adapter?

ちょっと脱線 (?) してみます。アダプタのソースコードが以下。

  • private な属性として LayoutInflater および ArrayList なオブジェクトの参照を持っている
  • コンストラクタでは LayoutInflater を context 使って取得してリストを属性に格納
  • onCreateViewHolder というメソドを定義 (override)
  • onBindViewHolder というメソドを定義 (override)
  • getItemCount というメソドを定義 (override)
  • ViewHolder という static な class を定義

ええと、onCreateViewHolder では行のレイアウトを inflate してその戻りを使って ViewHolder なオブジェクトを作って戻しています。

そして onBindViewHolder ではリストからデータ取得して渡された ViewHolder から TextView を取得して setText しています。getView ではなくなるのか。そしてこのあたりが押さえられてれば応用効かせることができるのかどうか。

LinearLayoutManager

以下な例を発見。スクロールで追加読み込み、なソレも RecycleView なんか。

凄く簡単に書けてます。凄いなぁ。

CoordinatorLayout (Toolbar Scrolling) 再び

全体を見回してみるに、動作を規定しているのはレイアウトリソースの以下の記述になるのかな。

app:layout_behavior="@string/appbar_scrolling_view_behavior"

上記は RecyclerView の属性な記述。

app:layout_scrollFlags="scroll|enterAlways"

上記は Toolbar の属性な記述。確認してみたところ @string/appvar_scrolling_view_behavior の定義元が分からない。これ、support library の範疇なのかな。

あと、app:layout_scrollFlags ですが以下が指定可能なのかどうか。

  • scroll
  • enterAlways
  • enterAlwaysCollapsed
  • exitUntilCollapsed

通常の出したり引っ込めたり、であれば上記の指定で良い模様。

CoordinatorLayout (Collapsing Toolbar)

これ、スルーで。

追補

Activity は全てが android.support.v7.app.AppCompatActivity を継承したものになっておりました。ここ、注意しておく必要がありますね。

さらに追補

以下なエントリがあるようです。

Comments