Respostas:
Sim, é implementável!
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
Consulte o link:
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
Sim, você pode definir a orientação da tela programaticamente sempre que quiser usando:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
para o modo paisagem e retrato, respectivamente. O método setRequestedOrientation () está disponível para a classe Activity , portanto, pode ser usado dentro de sua Activity.
E é assim que você pode obter a orientação da tela atual e configurá-la adequadamente, dependendo de seu estado atual:
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;
}
}
});
Retirado daqui: http://techblogon.com/android-screen-orientation-change-rotation-example/
EDITAR
Além disso, você pode obter a orientação da tela usando Configuration
:
Activity.getResources().getConfiguration().orientation
getRequestedOrientation()
para obter a orientação da tela atual: stackoverflow.com/a/21909327/1037294
getRequestedOrientation()
dá UNSPECIFIED
quando você inicia o aplicativo. Portanto, com o ouvinte acima, ele não mudará a tela e, se você adicionar UNSPECIFIED
ao, switch
ele deve colocar a tela em uma das posições Retrato / Paisagem primeiro.
Sempre que possível, não use SCREEN_ORIENTATION_LANDSCAPE ou SCREEN_ORIENTATION_PORTRAIT. Em vez disso, use:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
Eles permitem que o usuário oriente o dispositivo na orientação paisagem ou na orientação retrato, respectivamente. Se você já teve que jogar um jogo com um cabo de carga sendo colocado em seu estômago, você sabe exatamente por que ter as duas orientações disponíveis é importante para o usuário.
Nota: Para telefones, pelo menos vários que eu verifiquei, ele só permite o modo retrato "lado direito para cima", no entanto, SENSOR_PORTRAIT funciona corretamente em tablets.
Observação: esse recurso foi introduzido na API de nível 9, portanto, se você deve oferecer suporte a 8 ou inferior (provavelmente não é neste momento), use:
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);
Use para definir a orientação da tela:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
ou
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
e não se esqueça de adicionar ao seu manifesto:
android:configChanges = "orientation"
"orientation|screenSize"
, veja aqui: developer.android.com/guide/topics/resources/…
Um código funcional:
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);
}
}
chame este método em seu clique de botão