Android
 Computer >> コンピューター >  >> プログラミング >> Android

【サンプルコード付き】Androidで現在の画面の向き(縦・横)を取得する方法

はじめに:画面の向きを取得するシーンとは

Androidアプリ開発では、アクティビティが現在縦向き(ポートレート)なのか横向き(ランドスケープ)なのかを、プログラム側から判定したい場面があります。例えば、端末の向きに応じてレイアウトやUIを切り替えたいときなどです。
本記事では、getResources().getConfiguration().orientationを使って現在の画面の向きを取得し、その結果に応じてTextViewの表示を切り替えるサンプルを、手順に沿ってわかりやすく解説します。

ステップ1:新規プロジェクトを作成する

Android Studioを起動し、メニューからFile → New Projectを選択します。必要な項目を入力して、新しいプロジェクトを作成しましょう。

ステップ2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xmlに、以下のコードを記述します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/parent"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text"
        android:textSize="28sp"
        android:textAlignment="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

上記のコードでは、画面中央に1つのTextViewを配置しています。このTextViewには、画面の向きに応じて表示されるテキストが切り替わる仕組みを持たせます。

ステップ3:MainActivity.javaに処理を追加する

src/MainActivity.javaに、以下のコードを記述します。

package com.example.andy.myapplication;

import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    int view = R.layout.activity_main;
    TextView textview;

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(view);
        textview = findViewById(R.id.text);

        int orientation = this.getResources().getConfiguration().orientation;
        if (orientation == Configuration.ORIENTATION_PORTRAIT) {
            textview.setText("Portrait mode");
        } else {
            textview.setText("landscape mode");
        }
    }
}

ここが本記事の核心となる部分です。

int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    textview.setText("Portrait mode");
} else {
    textview.setText("landscape mode");
}

this.getResources().getConfiguration().orientationは、現在の画面の向きを整数値として返します。この値をConfiguration.ORIENTATION_PORTRAIT(縦向き)と比較することで、画面の向きを判定しています。

  • 縦向きの場合:Configuration.ORIENTATION_PORTRAITと一致 →「Portrait mode」を表示
  • 横向きの場合:一致しない →「landscape mode」を表示

なお、ConfigurationクラスにはORIENTATION_LANDSCAPE(横向き)やORIENTATION_UNDEFINEDなどの定数も用意されています。より厳密に分岐したい場合は、これらを活用するとよいでしょう。また、端末を回転するとデフォルトではActivityが再生成されるため、onCreate()内で判定しておけば、向きが変わったタイミングでも自動的に最新の状態へ更新されます。

アプリを実行して動作を確認する

実際のAndroid端末をパソコンに接続していることを確認してください。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの実行(Run)アイコンをクリックします。一覧から接続した端末を選択すると、アプリが起動して初期画面が表示されます。

【サンプルコード付き】Androidで現在の画面の向き(縦・横)を取得する方法

端末を縦向きのまま保持すると、上の画像のように「Portrait mode」と表示されます。次に端末を横向きに回転させてみましょう。下の画像のように、表示が自動的に切り替わることが確認できます。

【サンプルコード付き】Androidで現在の画面の向き(縦・横)を取得する方法

まとめ

本記事では、getResources().getConfiguration().orientationを使ってAndroidの現在の画面の向きを取得する方法を解説しました。取得した整数値をConfigurationクラスの定数と比較するだけで、縦向き・横向きの判定は非常にシンプルに実装できます。画面の向きに応じてUIやレイアウトを最適化したい場面で、ぜひ活用してみてください。

  1. Androidデバイスの画面の高さ・幅を取得する方法【サンプルコード付き】

    この記事では、Androidアプリで端末の画面の高さ(Height)と幅(Width)を取得する方法を、実際に動作するサンプルコードとともにステップごとに解説します。あわせて、画面サイズ(インチ数)を計算して表示する方法も紹介します。 仕組みのポイント:DisplayMetricsクラス Androidでは、DisplayMetricsクラスを使うことで、画面のピクセル数や密度(dpi)といったディスプレイ情報を簡単に取得できます。本記事のサンプルでは、このクラスを利用して画面の高さ・幅・インチ数を求めていきます。 手順1:Android Studioで新規プロジェクトを作成する Androi

  2. 【Android開発】プログラムから現在のSDKバージョン(APIレベル)を取得する方法

    この記事では、Androidアプリ内から現在のSDKバージョン(APIレベル)をプログラムで取得する方法を、実際のサンプルコードとともにわかりやすく解説します。使用するクラス:android.os.BuildAndroidでは、android.os.Build.VERSION クラスを使うことで、端末のOS情報を簡単に取得できます。主に以下の2つのフィールドを使用します。Build.VERSION.SDK_INT … APIレベルを整数値で返します(例:33)Build.VERSION.RELEASE … OSバージョンを文字列で返します(例:「13」)手順1:新規プロジェクトの作成まず、An