ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

読んだ: Android Layout Cookbook アプリの価値を高める開発テクニック / あんざいゆき 著

Android アプリのレイアウトのいじり方などが書かれた本 『Android Layout Cookbook アプリの価値を高める開発テクニック』 を読みました。 著者は、ブログ 「Y.A.M の 雑記帳」 のあんざいゆきさん。 Android 開発をしている人なら結構お世話になってるブログじゃないでしょうか。

Android Layout Cookbook アプリの価値を高める開発テクニック

Android Layout Cookbook アプリの価値を高める開発テクニック

約 3 年前 (2011 年 3 月) に発売されたものなので内容はやや古くなっていますが、学びもあったので感想やこの本で初めて知ったことなど書き残しておきます。

全体的なレビューや感想

前書きには次のように書かれています。

本書では前半でデフォルトの UI (ユーザーインタフェース) をカスタマイズする方法を紹介し、後半ではユーザービリティを改善するための具体的なチップスを紹介します。 各チップスは独立しているため、目次から求める内容の部分のみを読むことも可能ですし、全体を通して読むことでアプリのデザインや機能を改良するためのさまざまなヒントが手に入ります。
特に、さまざまな解像度やハードウェアが存在する Android 端末では必須なマルチデバイス対応について、レイアウト方法のコツから機能デザインまで詳しく紹介しました。

タイトルに 「Layout Cookbook」 と含まれていることからもわかりますし、前書きにも書かれていることですが、主に Android のレイアウトや UI について書かれています。 既に Android アプリ開発の基礎はわかっているけど、見た目のカスタマイズについては詳しくない、という人向けです。

Android アプリの UI に対して、どういうカスタマイズができるのか、どう記述すればカスタマイズできるのか、ということがわかりやすく書かれていて、良い本だと思います。 サンプルコードやスクリーンショットが豊富にあるのも理解しやすい一因です。

ただし、SDK 2.3 時代のものなので、Action Bar や Fragment といった最新の Android アプリ開発で使われている部品についての説明がない *1 など、内容的に古めであるというのは否めません。 読むのであればそういう点 (内容が古めということ) に注意が必要です。

本書を読んで初めて知ったこと

私が本書を読んで初めて知ったことをまとめておきます。

Draw 9-patch ツールを使って NinePatch 画像を作成できる

例えばボタンの背景に使用される画像だと、ボタンサイズによって全体の大きさを変化させたいけど、四隅の部分は拡大縮小されないようにしたい、ということがままある。 画像全体に合わせて拡大縮小する領域と拡大縮小しない領域が指定されたビットマップ画像として、Nine-Patch 画像というものがある。

Draw 9-patch ツールを使えば、そのような Nine-Patch 画像を WYSIWYG エディタで作成できる。

Toast#setView メソッドで Toast にビューを設定できる

Toast#setView メソッドView を設定できる。 文字列しか設定できないと思ってた。

AbsListViewandroid:cacheColorHint 属性

When set to a non-zero value, the cache color hint indicates that this list is always drawn on top of a solid, single-color, opaque background. Zero means that what's behind this object is translucent (non solid) or is not made of a single color.

AbsListView | Android Developers

ListView が、不透明で単一の色の上に描画される場合は、この属性にその色を設定すればリストの表示の最適化に使われるらしい。 不透明でなかったり、単一の色でない場合にはゼロ (XML の属性で設定する場合は @null かな?) を指定すれば良い模様。

ドキュメントにはデフォルト値への言及がないけど、機種によって (?) はデフォルト値が黒色になっているみたいで、ListView のスクロール時に黒色がちらついたりすることがあるみたいなので、この属性を明示的に設定する必要があるみたい。

AbsListViewlistSelector を項目の前面に表示させることができる

ListView の項目の選択状態を表すための Drawable を android:listSelector で指定できるわけだけど、デフォルトではこの Drawable は項目の背面に表示される。 なので、項目全体に画像を表示している場合などは変化が見えない。

android:drawSelectorOnToptrue にすると、項目の前面に表示されるようになる。

View Holder に View を保持させて View 取得処理を何度も行わないようにする

ListView のスクロールに応じて findViewById メソッド で同じ View を取得する処理が何度も実行されるということが多いが、その場合は View Holder (View を保持するクラス) を自分で定義して、そこに View を保持するようにすればいい。

View Holder のオブジェクトは View#setTag メソッドView に持たせておけばよい。

android:autoLink 属性で TextView 中の URL をリンクにする

android:autoLink 属性を使って、TextView 中の URL をリンクにすることができる。 また、HTML を元に TextView の中にリンクを表示させることもできる。

Quick Actions UI パターン

2010 年の Google I/O で紹介されたデザインパターンとして、Quick Actions パターンというものがあるらしい。 ボタンクリック時などにポップアップの中に実行できるアクションを複数表示して、ユーザーに選択させるというもの。 あんまり見かけない気はする。

独自フォントを使用する

assets にフォントファイルを入れておいて、TextView#setTypeface メソッド でそのフォントを指定する、ということができる。

Activity が処理できる configuration の変更を指定する

端末の向きなどの configuration が変化した場合、デフォルトでは Activity が一度破棄されて再度生成されるが、Activity 自身が configuration の変化を処理することもできる。 Activity が処理する configuration は AndroidManifest.xmlactivity 要素の android:configChanges 属性に記述しておく。

おわり

内容が古くはありましたが、勉強になる部分もあったので読んで良かったです。

あんざいゆきさんの著書で Android 4.0 対応の UI Cookbook も発売されていますので、今から購入するのであればこちらの方が良さそうではあります。 (内容を見てないのでわかりませんが。 Amazon.co.jp のレビューによると 『Android Layout Cookbook』 よりも質が落ちている、という意見もあるようですね。)

Android UI Cookbook for 4.0 ICS(Ice Cream Sandwich)アプリ開発術

Android UI Cookbook for 4.0 ICS(Ice Cream Sandwich)アプリ開発術

Kindle 版も発売されています。

*1:Action Bar については、レイアウトパターンとしての Action Bar への言及はあります