現在の画面の向きを取得するにはどうすればよいですか?


190

アクティビティがonCreate()で再作成されるときに、ポートレートとランドスケープのどちらにロードするかを切り替えることができるように、向きがランドスケープのときにいくつかのフラグを設定したいだけです。私はすでに私のレイアウトを処理するlayout-land xmlを持っています。

public void onConfigurationChanged(Configuration _newConfig) {

        if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            this.loadURLData = false;
        }

        if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            this.loadURLData = true;
        }

        super.onConfigurationChanged(_newConfig);
    }

onConfigurationChangedをオーバーライドすると、layout-land xmlが横向きで読み込まれなくなります。

onCreate()でデバイスの現在の向きを取得したいだけです。どうすれば入手できますか?

回答:


474
Activity.getResources().getConfiguration().orientation

8
これは、ORIENTATION_PORTRAITとORIENTATION_LANDSCAPEの2つの値のみを提供します。ActivityInfoから4つの値すべてを取得する方法はありますか?(つまり、LANDSCAPE_REVERSEおよびPORTRAIT_REVERSEでもあります)
HRJ

18
@HRJ getWindowManager()。getDefaultDisplay()。getRotation()を使用できます
MKJParekh

24
getWindowManager()。getDefaultDisplay()。getRotation()は、ディスプレイの「自然な」方向を基準にした回転を返します。つまり、タブレットの場合は横向きモードでSurface.ROTATION_0を返し、携帯電話の場合は同じ値を返します。肖像画。
ゾルタン2012

64
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

のスーパークラスthisContext


28

一部のデバイスでvoid onConfigurationChanged()はクラッシュする可能性があります。ユーザーはこのコードを使用して現在の画面の向きを取得します。

public int getScreenOrientation()
{
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
    int orientation = Configuration.ORIENTATION_UNDEFINED;
    if(getOrient.getWidth()==getOrient.getHeight()){
        orientation = Configuration.ORIENTATION_SQUARE;
    } else{ 
        if(getOrient.getWidth() < getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_PORTRAIT;
        }else { 
             orientation = Configuration.ORIENTATION_LANDSCAPE;
        }
    }
    return orientation;
}

そして使う

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}

1
getOrient.getWidth()およびgetOrient.getHeight()は現在非推奨であることに注意してください。
valerybodak 2015年

より詳細なように、正解としてマークする必要があります
Zapnologica '19年

1
正解としてマークする必要があり、すべての条件で最適に機能します。ただし、アニバーラーがgetActivity()。getWindowManager()。getDefaultDisplay()。getWidth()およびgetHeight()を非推奨にしたため、注意してください。getSize(Point outsize)を使用してください。新しいポイントオブジェクトを渡すものとして使用でき、そのxおよびyメンバーを取得します。
Mahendra Chhimwal

Point outSize = new point();のように getOrient.getSize(outSize); if(outSize.x == outSize.y)return SQUARE;
Mahendra Chhimwal

私が指摘すると思いますが、Configuration.ORIENTATION_SQUAREは非推奨であり、2013年には0として定義されていた可能性がありますが、Configuration.ORIENTIATION_UNDEFINEDは0として定義されています。
Daveは

26
int rotation =  getWindowManager().getDefaultDisplay().getRotation();

これにより、通常および逆のようなすべての向きが得られます

そしてそれを

int angle = 0;
switch (rotation) {
    case Surface.ROTATION_90:
        angle = -90;
        break;
    case Surface.ROTATION_180:
        angle = 180;
        break;
    case Surface.ROTATION_270:
        angle = 90;
        break;
    default:
        angle = 0;
        break;
}

final int angle = (rotation == Surface.ROTATION_90) ? 90 : (rotation == Surface.ROTATION_180) ? 180 : (rotation == Surface.ROTATION_270) ? 270 : 0;
Andrey Syrokomskiy



1

アクティビティクラスで、以下のメソッドを使用します。

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            setlogo();// Your Method
            Log.d("Daiya", "ORIENTATION_LANDSCAPE");

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

            setlogoForLandScape();// Your Method
            Log.d("Daiya", "ORIENTATION_PORTRAIT");
        }
    }

次に、アクティビティが構成の変更を処理することを宣言するには、マニフェストファイルの適切な要素を編集して、処理する構成android:configChangesを表す値を持つ属性を含めます。可能な値は、android:configChanges属性のドキュメントにリストされています(最も一般的に使用される値は、画面の向きが変わったときに再起動しないようにする「orientation」と、キーボードの可用性が変わったときに再起動しないようにする「keyboardHidden」です)。パイプで区切ることにより、属性で複数の構成値を宣言できます。キャラクター。

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

それで全部です!!


0

そのonConfigurationChangedメソッドをオーバーライドし、それでも基本的なことを実行したい場合は、オーバーライドされたメソッドの最初のステートメントとしてsuper.onConfigyrationChanged()を使用することを検討してください。


0

私はあなたの一部に関係する別の代替案を提案したいだけです:

android:configChanges="orientation|keyboardHidden" 

挿入するレイアウトを明示的に宣言することを意味します。

layout-landとlayoutフォルダーのおかげで自動注入を維持したい場合に備えて。これをonCreateに追加するだけです。

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

ここでは、電話の向きに応じてアクションバーを表示するかどうかを示します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.