Androidでランドスケープモード(横向き画面)を検出してアクティビティで確認する方法
はじめに
このチュートリアルでは、Androidアプリがランドスケープ(横向き)モードで動作しているかどうかをアクティビティ内で確認する方法を解説します。画面の向きの変化を検出するには、onConfigurationChanged()コールバックメソッドを利用します。
手順1:新しいプロジェクトを作成する
Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。
手順2:レイアウトファイルにコードを追加する
res/layout/activity_main.xmlに以下のコードを追加します。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/conf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
上記のコードでは、現在の画面モード名を表示するためのTextViewを画面中央に配置しています。
手順3:MainActivity.javaにコードを追加する
java/MainActivity.javaに以下のコードを追加します。
package com.example.myapplication;
import android.content.res.Configuration;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView conf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
conf = findViewById(R.id.conf);
}
@Override
public void onConfigurationChanged(Configuration _newConfig) {
super.onConfigurationChanged(_newConfig);
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
conf.setText("It is landscape");
}
}
}
ここでのポイントはonConfigurationChanged()メソッドです。このメソッドは、画面の回転などのシステム設定変更が発生した際に呼び出されます。引数として渡されるConfigurationオブジェクトのorientationフィールドをチェックし、ORIENTATION_LANDSCAPEと一致した場合にTextViewのテキストを更新しています。
手順4:AndroidManifest.xmlにコードを追加する
AndroidManifest.xmlに以下のコードを追加します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
特に重要なのが、activityタグ内のandroid:configChanges="keyboardHidden|orientation"という属性です。通常、端末を回転するとアクティビティは一度破棄されて再生成されますが、この属性を指定することで再生成を回避でき、代わりにonConfigurationChanged()メソッドが呼び出されるようになります。
アプリを実行して動作を確認する
それでは、実際にアプリを実行してみましょう。実機のAndroidスマートフォンをパソコンに接続しておいてください。Android Studioからアプリを実行するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーのRun(実行)アイコンをクリックします。デバイス選択画面で接続したスマートフォンを選ぶと、端末の画面にアプリが表示されます。
端末を横向きに回転させると、画面に「It is landscape」と表示され、ランドスケープモードであることが正しく検出されていることを確認できます。

-
【Android】透過(半透明)アクティビティの作り方をステップごとに解説
このチュートリアルでは、Androidアプリで背景が透過した(半透明の)アクティビティを作成する方法を、実際のコード例とともに段階的に解説します。ダイアログ風の画面やオーバーレイ表示など、さまざまな場面で活用できるテクニックなので、ぜひ参考にしてください。 手順1:新規プロジェクトの作成 まず、Android Studioを起動し、「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目をすべて入力し、プロジェクトのセットアップを完了させてください。 手順2:透過用テーマの定義(res/values/styles.xml) 次に、透過表示用のカスタムテーマを
-
Androidで分割画面モードを使う方法【機種別・バージョン別に解説】
Androidスマートフォンの「分割画面モード」を使えば、画面上に2つのアプリを同時に表示できます。片方のアプリからもう片方のアプリへテキストをコピー&ペーストしたいときや、動画を見ながらSNSをチェックしたいときなどに便利な機能です。 分割画面モードの利用条件 Androidの分割画面モードを使用するには、Android 7.0 Nougat以降が搭載されている必要があります。さらに、この機能に対応したアプリも必要です。 サムスンなど一部のメーカーは、独自の分割画面機能を提供しています。本記事で紹介する方法はGoogle製スマートフォンで確実に動作し、他メーカーのAndroid端末でもほぼ同