Risposte:
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
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
getRequestedOrientation()
per ottenere l'orientamento dello schermo corrente: stackoverflow.com/a/21909327/1037294
getRequestedOrientation()
ti dà UNSPECIFIED
quando avvii l'app. Quindi con l'ascoltatore sopra non cambierà schermo e se lo aggiungi UNSPECIFIED
a switch
dovrebbe mettere prima lo schermo in una posizione verticale / orizzontale .
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);
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"
"orientation|screenSize"
, guarda qui: developer.android.com/guide/topics/resources/…
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