Est-il possible de savoir si un appareil est en mode portrait ou paysage par défaut? En cela, je veux dire comment vous utilisez normalement l'appareil.
La plupart des téléphones ont un écran portrait pour une utilisation normale, mais existe-t-il un indicateur permettant de le savoir?
Vous pouvez le faire en:
Pour le paysage
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
//Do some stuff
}
Pour Portrait
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
//Do some stuff
}
Vérifiez: http://developer.Android.com/reference/Android/content/res/Configuration.html#orientation
Grâce à @Codeversed, dont l'excellente réponse est sur le point de fonctionner (mais ne fonctionne pas comme indiqué), j'ai un MainActivity
qui fonctionne bien. Tout ce qui doit être fait est de déplacer .enable
vers où il peut être exécuté EN DEHORS du bloc on
, par exemple immédiatement après la déclaration de myOrientationEventListener
.
import Android.app.Activity;
import Android.hardware.SensorManager;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.OrientationEventListener;
public class MainActivity extends Activity
{
public static boolean PORTRAIT_MODE = true;
OrientationEventListener myOrientationEventListener ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myOrientationEventListener = new OrientationEventListener(this,
SensorManager.SENSOR_DELAY_NORMAL)
{
@Override
public void onOrientationChanged(int orientation)
{
PORTRAIT_MODE = ((orientation < 100) || (orientation > 280));
Log.w("Orient", orientation + " PORTRAIT_MODE = " + PORTRAIT_MODE);
}
};
Log.w("Listener", " can detect orientation: " + myOrientationEventListener.canDetectOrientation() + " ");
myOrientationEventListener.enable();
}
}
Dans votre activité, procédez comme suit:
if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
par exemple...
package com.Android.portraitandlandscape;
import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.Display;
import Android.widget.Toast;
public class PortraitLandScape extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
Log.v("log_tag", "display width is "+ width);
Log.v("log_tag", "display height is "+ height);
if(width<height){
Toast.makeText(getApplicationContext(),"Device is in portrait mode",Toast.LENGTH_LONG ).show();
}
else{
Toast.makeText(getApplicationContext(),"Device is in landscape mode",Toast.LENGTH_LONG ).show();
}
}
}
Vous pouvez essayer ce code pour vérifier si le périphérique est en mode paysage ou en mode portrait.
J'ai eu un problème similaire. Résolu en comparant les valeurs de rotation et d'orientation. Il n'est pas nécessaire d'utiliser des capteurs ou des écouteurs, appelez simplement la méthode isDefaultLandscape
à tout moment.
private boolean isDefaultLandscape(final Context context)
{
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
int orientation = context.getResources().getConfiguration().orientation;
switch (rotation)
{
case Surface.ROTATION_180:
case Surface.ROTATION_0:
{
return orientation == Configuration.ORIENTATION_LANDSCAPE;
}
default:
{
return orientation == Configuration.ORIENTATION_PORTRAIT;
}
}
}
Je ne sais pas si cela vous aidera, mais voici un exemple rapide que j'ai écrit et qui vous montrera comment avoir un auditeur ... qui vous permettra de déterminer l'orientation de votre orientation.
...textviewOrientation = (TextView)findViewById(R.id.textView1);
myOrientationEventListener = new OrientationEventListener(this,
SensorManager.SENSOR_DELAY_NORMAL){
@Override
public void onOrientationChanged(int arg0) {
textviewOrientation.setText("Orientation: " + String.valueOf(arg0));
myOrientationEventListener.enable();
if ((arg0 < 100) || (arg0 > 280)){
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
};...
...@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
myOrientationEventListener.disable();
}...
C'est simple , Juste un bloc If-Else
:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// landscape
} else {
// portrait
}
// Current orientation
public boolean landscape = false;
public boolean isLandscape(){
DisplayMetrics displaymetrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = displaymetrics.widthPixels;
int height = displaymetrics.heightPixels;
if(width<height){
landscape = false;
}
else{
landscape = true;
}
return landscape;
}