Androidアプリ開発

アプリをタブレットに対応する

この記事は約11分で読めます。
記事内に広告が含まれています。
スポンサーリンク

この記事は Androidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、
記事の最後で紹介します)

この記事のテーマ


タブレット向けにアプリを最適化する

タブレットの横向き画面で最適化。

5年間OSバージョンアップできるのは、Google 純正タブレットの Pixel Tablet だけ💛

ポイント

タブレットはスマホと比べて画面の大きさ、アスペクト比に違いがあります。
スマホの画面は縦方向に長く、タブレットの画面は横方向に長い特徴があります。
タブレットに対応する場合、アプリの画面デザインに考慮が必要です。
また、Androidには端末の傾きを検知して、画面を自動で回転する仕組みがあります。
縦向き・横向きの両方に対応、画面の自動回転で、ユーザエクスペリエンスの向上が期待できます。
ここで、
注意点があります。
Android では画面が回転する際、画面( Activity )が再起動します。
ダイアログを表示中に再起動が発生すると、アプリが意図しない動作をしたり、クラッシュすることがあります。
このため、画面が自動回転しないよう画面の向きをアプリで固定することが、簡易的な対処方法でした。
しかし、タブレットでは本体側の設定(画面の自動回転)が優先され、アプリで画面の向きが固定できません。
つまり、アプリ側で
画面の回転が発生する前提で対応する必要があります。
今回は、タブレット向けに Android アプリを最適化する方法について、紹介いたします。

画面の向きをアプリで指定する

画面の向きは、マニフェスト( AndroidManifest.xml )に指定します。
この指定は、スマホの場合は自動回転の影響、端末の向きに関係なく、画面レイアウトと向きを固定できます。
タブレットの場合、画面レイアウトは固定されますが、端末の傾きを検知して、画面が自動回転します。

    <application
        …
        <activity
            …
            android:screenOrientation="portrait"
            tools:ignore="LockedOrientationActivity"
            … />
        </activity>
        …
    </application>

タブレット判定

使用している端末がタブレットであるか、コードで判定します。

private boolean isTablet(Context context) {
    return context.getResources().getConfiguration().smallestScreenWidthDp >= 600;
}

タブレットの場合は画面の向きを固定しない

スマホの場合は画面を縦向きに、タブレットの場合は画面の向きを固定しない場合は、マニフェストで画面の向きを指定しないで、コードで記述します。

…
// 画面縦横設定
setRequestedOrientation(isTablet(context) ? ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
…

画面(Activity)の再起動を抑止する

Android の標準的な動作では、画面が回転する際に画面の再描画のため、Activity が再起動します。
ダイアログの表示中に再起動が発生すると、アプリが意図しない動作をしたり、クラッシュすることがあります。
この画面回転時の
Activity の再起動の動作は、マニフェストへの指定で回避します。

<application
       …
    <activity
        …
        android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
        …
    />
       …
</application>

タブレットを対象とする場合、screenLayout keyboardHidden の指定が必要です。

画面の再起動を抑止した場合の問題

画面の再起動を抑止した場合、別の問題が発生することがあります。
画面上にサイズや位置を指定したオブジェクトは、画面が回転することで、画面からはみ出したり、きれて表示されることがあります。
インタースティシャル広告を実装している場合、画面が回転した後の広告表示の向きを考慮します。

ダイアログのリサイズ

画面の回転を検知は、Activity onConfigurationChanged を使用します。

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
     if (customDailog != null) customDailog.resize();
        … 
        super.onConfigurationChanged(newConfig);
    }

ダイアログの表示中に画面の回転を検知したら、DialogFragment のリサイズを呼び出します。
画面が回転した場合に、ダイアログのサイズが変化しないように、横向きの画面ではナビゲーションバーを差し引いた高さをダイアログの幅とします。

    public class CustomDialog extends DialogFragment {
        …    
        public void resize() {
            boolean isTablet = getResources().getConfiguration().smallestScreenWidthDp >= 600;
            DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            int dialogWidth = displayMetrics.widthPixels;
            int dialogHeight = displayMetrics.heightPixels;
            WindowManager.LayoutParams layoutParams1 = dialog.getWindow().getAttributes();
            layoutParams1.width = dialogWidth;
            dialog.getWindow().setAttributes(layoutParams1);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            dialog.setCanceledOnTouchOutside(true);
            int width  = isTablet ? Math.min(dialogWidth - 120, dialogHeight) : dialogWidth;
            layoutParams1 = dialog.getWindow().getAttributes();
            layoutParams1.width = width;
            dialog.getWindow().setAttributes(layoutParams1);
       }
   }

インタースティシャル広告のリロード

画面の回転を検知したら、インタースティシャル広告をリロードします。
インタースティシャル広告の実装は、以下の参考リンクで確認できます。

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        adInterstitial = new AdInterstitial(context, context.getString(R.string.adUnitId5));
        if (nendAdInterstitialVideo != null) nendAdInterstitialVideo.loadAd();
        super.onConfigurationChanged(newConfig);
    }

◎AdMobインタースティシャル広告の実装

◎nend動画インタラクティブ広告の実装

今回は、ここまでです。

タブレット向けにアプリを最適化している Androidアプリです。

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちらから、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Android のアプリ開発ができるようになるには、かなりの時間がかかります。オンラインスクールでの習得を、強くおススメします。

未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪

未経験者からプログラマーを目指すのに最適かと、
まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています、
お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、
まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

スポンサーリンク
msakiをフォローする
スポンサーリンク
The Challenge of Second Life