Android タブレットとスマートフォンに対応したアプリケーション 【Android_TIPS】
タブレットの場合は2ペインの画面、スマートフォンの場合は2ペインのそれぞれを1つずつの画面としてアプリケーションを構築したい場合のサンプルプログラムを紹介します。
Android 2.3以前での動作をサポートするため、android.support.v4パッケージを使用します。
動作イメージ
- ListViewでタップしたサイトを表示する。
- Android 3.0以上のタブレットでは2ペイン表示に、それ以外ではListViewの画面とWebViewの2画面を持つ。
- BACKキーを押下した場合は、タブレットの場合は右ペインをひとつ前に戻し、スマートフォンの場合はListViewの画面に戻す。
Android 3.2のエミュレータ上で動かした場合
Android 2.1のエミュレータで動かした場合
ソースコード
HelloFragment/src/com.example.hellofragment/MainActivity.java
package com.example.hellofragment;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import com.example.hellofragment.LeftFragment.OnSearchEngineSelectedListener;
public class MainActivity extends FragmentActivity implements
OnSearchEngineSelectedListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isHoneycombTablet(this)) {
setContentView(R.layout.activity_main_tab);
} else {
setContentView(R.layout.activity_main_sp);
}
}
public static boolean isHoneycomb() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
public static boolean isHoneycombTablet(Context context) {
return isHoneycomb() && isTablet(context);
}
@Override
public void onSearchEngineSelected(String url) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (isHoneycombTablet(this)) {
ft.replace(R.id.fragment2tab, RightFragment.newInstance(url));
} else {
ft.replace(R.id.fragment1sp, RightFragment.newInstance(url));
}
ft.addToBackStack(null);
ft.commit();
}
}
26~36行目:実行している端末がタブレットかスマートフォンか判断するメソッド
19~23行目:上記メソッドを使い、Activityが読み込むレイアウトファイルを動的に決定する
39~49行目:独自定義したリスナー「OnSearchEngineSelectedListener」のメソッドをオーバーライド。
タブレットの左ペイン(スマートフォンの場合はListView画面)でタップした項目に応じて右ペイン
(スマートフォンの場合はWebView画面)のFragmentを切り替えている。
切り替えたFragmentはバックスタックにいれ、BACKボタンを押下した時に戻れるようにする。