この記事は 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>
画面の再起動を抑止した場合の問題
画面の再起動を抑止した場合、別の問題が発生することがあります。
画面上にサイズや位置を指定したオブジェクトは、画面が回転することで、画面からはみ出したり、きれて表示されることがあります。
インタースティシャル広告を実装している場合、画面が回転した後の広告表示の向きを考慮します。
ダイアログのリサイズ
画面の回転を検知は、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を習得するのに最適かと、
まずは無料オンライン相談から♪
参考になったら、💛をポッチとしてね♪
コメント欄