Modificare l'orientamento dello schermo a livello di codice utilizzando un pulsante


Risposte:


216

Sì, è implementabile!

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

Fare riferimento al collegamento:

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-programmatical.html


Grazie. Ma questa funzione deve essere eseguita su un dispositivo rooted? Sembra che non funzioni sul mio cellulare ma sul mio tablet con root.
— Sam il

No, non è così .. In realtà ho testato il codice in quel link prima di postare .. Funzionava sul mio dispositivo ..
— Hariharan

ok, sì, hai ragione. ho appena provato un altro dispositivo e funziona bene. bene, il mio Samsung Galaxy Nexus non funziona. Non so perché.
— Sam il

4
Grazie per la risposta. Ma questo blocca l'applicazione in quella modalità. Quando l'utente ruota il dispositivo, lo schermo non ruota.
— Eco4ndly

2
Se imposto programmaticamente l'orientamento orizzontale come questa risposta, l'utente non è più in grado di modificare l'orientamento ruotando il dispositivo. Qualche modo per gestire questo problema? Voglio fare ciò che è stato insegnato in questa risposta, ma poi quando l'utente ruota il dispositivo continuerà a cambiare l'orientamento.
— Presto Santos

36

Sì, puoi impostare l'orientamento dello schermo in modo programmatico ogni volta che vuoi utilizzando:

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

rispettivamente per la modalità orizzontale e verticale. Il metodo setRequestedOrientation () è disponibile per la classe Activity , quindi può essere utilizzato all'interno della tua Activity.

Ed è così che puoi ottenere l'orientamento corrente dello schermo e impostarlo adeguatamente a seconda del suo stato corrente:

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;                   
               }
          }
   });

Tratto da qui: http://techblogon.com/android-screen-orientation-change-rotation-example/

MODIFICARE

Inoltre, puoi ottenere l'orientamento dello schermo utilizzando Configuration:

Activity.getResources().getConfiguration().orientation

3
Io suggerirei di utilizzare getRequestedOrientation()per ottenere l'orientamento dello schermo corrente: stackoverflow.com/a/21909327/1037294
— a.ch.

getRequestedOrientation()ti dà UNSPECIFIEDquando avvii l'app. Quindi con l'ascoltatore sopra non cambierà schermo e se lo aggiungi UNSPECIFIEDa switchdovrebbe mettere prima lo schermo in una posizione verticale / orizzontale .
— mortalis

22

Laddove possibile, non utilizzare SCREEN_ORIENTATION_LANDSCAPE o SCREEN_ORIENTATION_PORTRAIT. Usa invece:

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

Questi consentono all'utente di orientare il dispositivo rispettivamente in orientamento orizzontale o verticale. Se hai mai dovuto giocare a un gioco con un cavo di ricarica inserito nello stomaco, allora sai esattamente perché avere entrambi gli orientamenti disponibili è importante per l'utente.

Nota: per i telefoni, almeno diversi che ho controllato, consente solo la modalità verticale "con il lato destro in alto", tuttavia SENSOR_PORTRAIT funziona correttamente sui tablet.

Nota: questa funzione è stata introdotta nel livello API 9, quindi se devi supportare 8 o inferiore (non probabile a questo punto), usa invece:

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

Usalo per impostare l'orientamento dello schermo:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

o

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

e non dimenticare di aggiungere questo al tuo manifest:

android:configChanges = "orientation"

2
Hai bisogno di entrambi "orientation|screenSize", guarda qui: developer.android.com/guide/topics/resources/…
— Benny

7

Un codice funzionante:

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);
    }
}

chiamare questo metodo nel clic del pulsante

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.