안녕하세요.

 

버튼을 터치하고 있는 동안 터치상태 유지를 위해 화면을 고정을 하고자 합니다.

일반 portrait기반의 단말에서는 rotation 값을 이용하여 화면을 고정을 하면 되는데, 특정 몇몇 단말과 탭 디바이스에서는 Landscape을 기본으로 하고 있어서, 화면 고정을 orientation 값을 읽어와서 고정을 하였습니다. (아래 코드)

 

 portrait가 기본인 단말에서 landscape보기를 할경우 일반적으로 사람들이 시계반대 방향으로 돌립니다.

이는 아래 랜드스케이프에서 처럼, 0도인 경우는 랜드스케이프가 기본인 단말인 경우이며, 90도는 포트레이트가 기본인 단말이 회전에 의하여 랜드스케이프가 된 경우이면, 그 아래 값도 회전 반경에 맞게 구성이 됩니다.

 

그런데, 랜드스케이프가 기본인 단말에서 포트레이트를 보기 하는 경우 일반적으로 사람들이 시계방향으로 돌립니다.

이는 270도 각도로 회전하게 되는 현상이며, 이를 정상적인 포트레이트로 정의가 되어 있습니다.

즉 90도 회전에 대해서 리버스 포트레이트가 됩니다.

 

탭 디바이스는 갤럭시탭 8.9LTE 버전입니다.

 

한가지 궁금한 점은 랜드스케이프가 디폴트인 단말은 포트레이트 설정이 270도로 설정이 되어 있는데, 이게 한국인의 특성에 맞게 맞춰 놓은 것인지? 해외의 다른 단말들도 똑같은 설정인지가 궁금합니다.

 

서양인의 경우나? 왼손잡이의 경우는 또 돌리는 방향이 다르지 않을까? 나라마다 방향 전환이 다르면 설정도 달라지는게 아닌가 하는 의문점이 발생합니다.

 

혹시 이 방법 외에, 좀더 명확하게 정의를 내릴 수 있는 방법이 있을런지요?

 

test.java
   ((Activity)this.context).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
  Display display = wm.getDefaultDisplay();
  int rotation = 0;
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
   rotation = display.getRotation();
  } else {
   rotation = display.getOrientation();
  }
  int defaultOrientation = context.getResources().getConfiguration().orientation;
  if (defaultOrientation == Configuration.ORIENTATION_PORTRAIT) {
   if (AppConfig.isDebug()) {
    Log.d(TAG, "ORIENTATION_PORTRAIT - rotation[" + rotation + "]");
   }
   switch (rotation) {
    case Surface.ROTATION_0:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
     break;
    case Surface.ROTATION_90:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
     break;
    case Surface.ROTATION_180:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
     break;
    case Surface.ROTATION_270:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
     break;
   }
  } else if (defaultOrientation == Configuration.ORIENTATION_LANDSCAPE) {
   if (AppConfig.isDebug()) {
    Log.d(TAG, "ORIENTATION_LANDSCAPE - rotation[" + rotation + "]");
   }
   switch (rotation) {
    case Surface.ROTATION_0:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
     break;
    case Surface.ROTATION_90:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
     break;
    case Surface.ROTATION_180:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
     break;
    case Surface.ROTATION_270:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
     break;
   }
  } else {
   if (AppConfig.isDebug()) {
    Log.d(TAG, "ORIENTATION_SQUARE or ORIENTATION_UNDEFINED - rotation[" + rotation + "]");
   }
   switch (rotation) {
    case Surface.ROTATION_0:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
     break;
    case Surface.ROTATION_90:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
     break;
    case Surface.ROTATION_180:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
     break;
    case Surface.ROTATION_270:
     ((Activity)this.context).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
     break;
   }
  }