ハニコム対応戦略 〜その3〜 やったことざざっと

前回はどんな感じでPhone向けのアプリををTablet向けにした際に割り当てていったかを書きました。
今回はもう少し細かく具体的に何やったかをまとめます。
重ねて言いますが、Google I/O 2011公式アプリがベストプラクティスなのでそちらを参照して真似るのが一番良いと思います。あと、こことかここ見たらちゃんとやるべき事の詳細は書かれています。
なので、このページで書いてあることは、ひとつのPhone向けアプリをTablet向けにする際の一例だと思っていただければと思います。

1.テーマHoloの使用
 TableでActionBarを利用したければ、ActivityのテーマをHolo系にする必要があります。

 

みたいな感じ。

2.ActionBarとMenuとTitleBar
 ActionBarは普通にMenuを利用していればそのまま画面右上に表示されます。自分の場合、Phone向けのUIではあまり頻繁に操作することのない機能をMenuに入れることが多かったのですが、ハニコムでHoloテーマを使用した場合、ActionBar右側にこのMenuが出てくるので、それでいいのか考えましょう。
 Phone前提の画面レイアウトでは、頻繁に利用するボタンを画面下部に配置することが多かったのですが、Tabletの場合にこれが適切か否かを検討しましょう。必要があれば、ActionBarにいれてしまいましょう。

3.リソース
 ちゃんとdp、sp指定して画面レイアウトを構成してあれば、基本的にリソースはいじる必要はないはずです。
 ただ、Tabletでは画面サイズが大きくなるので、大きなサイズで綺麗に表示したい場合はそれ相応の画像リソースを用意する必要があります。

4.android-support-v4.jarのインポート
 ハニコム以前の環境でFragmentをサポートするためにandroid-support-v4.jarをインポートする必要があります。
 android.app.Fragmentをimportする代わりにandroid.support.v4.app.Fragmentを#importします。
 Fragment周りで主に利用するクラス。
 android.support.v4.app.Fragment
 android.support.v4.app.FragmentActivity → Activity継承のクラスはFragmentActivity継承に切り替える。
 android.support.v4.app.FragmentManager
 android.support.v4.app.FragmentTransaction
 
5.Phone/Tabletでの画面レイアウトの切り替え
 PhoneとTabletで画面レイアウトを切り替えるために利用できる簡単な方法はLayout xmlをフォルダで分けることです。
 例えばこんな感じ
  res/layout/main_activity.xml ・・・・・・ Phone用Activity
  res/layout-land-v11/main_activity.xml・・・Tablet横向き用Activity
 トップ画面はランチャーから呼び出されるActivityがひとつなので、レイアウトで切り替える感じ。
 
6.Phone/TabletでstartActivity()するActivityクラスの切り替え
 PhoneとTabletで呼び出すActivityをそれぞれ実装してstartActivity()のタイミングで呼び出すActivityを切り替えることができます。
 例えばこんな感じ

 Intent intent;
 if ( UIUtils.isHoneycomb() )
  intent = new Intent(getActivity(), ForTabletActivity.class);
 else
  Intent intent = new Intent(getActivity(), ForPhoneActivity.class);
 getActivity().startActivity(intent);
 
※UIUtilsについてはGoogle I/O 2011公式アプリ参照のこと。

7.FragmentとActivity間のやりとり
こんな感じでActivity側にコールバックを実装する。

public interface PhotoListEventsCallback {
public void onThumbnailSelected(PhotoData photo);
public void onThumbnailSelected(List list, int position);
public void onNextImage();
public void onPrevImage();
public void onChangeFavorite(FavoriteDataList favorites);
public void onStartProgress();
public void onStopProgress();
}

コメント

このブログの人気の投稿

Joinノードを使う(その1)

Execノードを使う

Joinノードを使う(その4)