web-dev-qa-db-ja.com

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

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()でデバイスの現在の向きを取得したいだけです。どうすれば入手できますか?

174
Sheehan Alam
Activity.getResources().getConfiguration().orientation
436
EboMike
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

thisのスーパークラスがContextの場合

54
Daniel

一部のデバイスでは、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
}
27
Sakthimuthiah
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;
}
23
AndroidBeginner
getActivity().getResources().getConfiguration().orientation

このコマンドは、縦向きの場合はint値1、横向きの場合は2を返します

12
Rudolf Coutinho

誰かが 意味のある 向きの説明(これらのreverseLandscapesensorLandscapeなどでonConfigurationChanged(..)に渡されるものなど)を取得したい場合は、単に getRequestedOrientation() を使用します

5
a.ch.

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

 @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属性のドキュメントにリストされています(最も一般的に使用される値は、画面の向きが変わったときに再起動を防ぐ「向き」と、キーボードの可用性が変わったときに再起動を防ぐ「keyboardHidden」です)。パイプで区切ることにより、属性で複数の構成値を宣言できます。キャラクター。

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

それで全部です!!

1

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

0
Samarth S

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

Android:configChanges="orientation|keyboardHidden" 

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

レイアウトランドとレイアウトフォルダーのおかげで自動注入を維持したい場合。必要なのは、onCreateに追加するだけです。

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

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

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

0
Z3nk