ボタンを使用してプログラムで画面の向きを変更する


回答:


216

はい、実装可能です!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ActivityInfo

http://developer.android.com/reference/android/content/pm/ActivityInfo.html

リンクを参照してください:

Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);

buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   }

});

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
   }

});

http://android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html


ありがとう。しかし、この機能はルート化されたデバイスで実行する必要がありますか?それは私の携帯電話ではなく私の根ざしたタブレットで動作しているようです。
サム・

いいえ、それはそうではありません。実際に投稿前にそのリンクのコードをテストしました..それは私のデバイスで動作していました..
Hariharan

はい、そうです、あなたは正しいです。別のデバイスをテストしたところ、問題なく動作しました。まあ、私のSamsung Galaxy Nexusは動作しません。理由がわからない。
2013

4
答えてくれてありがとう。しかし、これはそのモードでアプリケーションをロックします。ユーザーがデバイスを回転させているとき、画面は回転していません。
Eco4ndly 2018

2
この回答としてプログラムで向きを横向きに設定すると、ユーザーはデバイスを回転させて向きを変更できなくなります。この問題を処理する方法はありますか?この答えで教えられたことをやりたいのですが、ユーザーがデバイスを回転させると、向きが変わり続けます。
まもなくサントス

36

はい、いつでも使用したいときにプログラムで画面の向き設定できます。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

それぞれ横長モードと縦長モード用。setRequestedOrientation()メソッドはActivityクラス使用できるため、アクティビティ内で使用できます。

これは、現在の画面の向き取得し、現在の状態に応じて適切に設定する方法です。

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
final int orientation = display.getOrientation(); 
 // OR: orientation = getRequestedOrientation(); // inside an Activity

// set the screen orientation on button click
Button btn = (Button) findViewById(R.id.yourbutton);
btn.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

              switch(orientation) {
                   case Configuration.ORIENTATION_PORTRAIT:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                       break;
                   case Configuration.ORIENTATION_LANDSCAPE:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                       break;                   
               }
          }
   });

ここから取得http : //techblogon.com/android-screen-orientation-change-rotation-example/

編集

また、次を使用して画面の向きを取得できますConfiguration

Activity.getResources().getConfiguration().orientation

3
私が使用してお勧めしたいgetRequestedOrientation()、現在の画面の向きを取得する:stackoverflow.com/a/21909327/1037294を
a.ch.を

getRequestedOrientation()UNSPECIFIEDアプリを起動すると表示されます。したがって、上記のリスナーでは画面は変更されません。それに追加UNSPECIFIEDする場合は、最初にswitch画面を縦/横のいずれかの位置に配置する必要があります。
モータリス2018

22

可能な限り、SCREEN_ORIENTATION_LANDSCAPEまたはSCREEN_ORIENTATION_PORTRAITを使用しないでください。代わりに以下を使用してください:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

これらにより、ユーザーはデバイスを横向きまたは縦向きにそれぞれ向けることができます。充電ケーブルを胃の中に差し込んでゲームをプレイしなければならなかったことがあれば、両方の向きを利用できることがユーザーにとって重要である理由を正確に理解できます。

注:私が確認した少なくともいくつかの電話では、「縦向き」のポートレートモードしか使用できませんが、SENSOR_PORTRAITはタブレットで正常に動作します。

注:この機能はAPIレベル9で導入されたため、8以下をサポートする必要がある場合(現時点ではそうではない)、代わりに次を使用します。

setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

19

これを使用して、画面の向きを設定します。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

または

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

これをマニフェストに追加することを忘れないでください:

android:configChanges = "orientation"

2
あなたは両方を必要とし"orientation|screenSize"、ここを見て:developer.android.com/guide/topics/resources/...
ベニー

7

実用的なコード:

private void changeScreenOrientation() {
    int orientation = yourActivityName.this.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        showMediaDescription();
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        hideMediaDescription();
    }
    if (Settings.System.getInt(getContentResolver(),
            Settings.System.ACCELEROMETER_ROTATION, 0) == 1) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            }
        }, 4000);
    }
}

ボタンクリックでこのメソッドを呼び出す

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