Tips

Android タブレットとスマートフォンに対応したアプリケーション 【Android_TIPS】

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のエミュレータ上で動かした場合

device-2012-10-19-171712

 

Android 2.1のエミュレータで動かした場合

device-2012-10-19-171754device-2012-10-19-171817

 

ソースコード

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ボタンを押下した時に戻れるようにする。

 

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search