猫の手も借りたい

ソフトウエア開発者の多忙な生活

先日、こちらに端末の回転対応について書きましたが、そこにある方法では不十分なことが分かりました。Galaxy SとXPERIA ARCは逆さの横持ちに対応しています。横持ちは通常端末を反時計回りに回転させますが、その反対でも横向き画面になります。僕が持っているos2.1の端末は、この状態に対応していません。どうやら、os2.2以降だと逆さの縦持ちもアリのようですが、上記端末ではこれはサポートしていないようです。で、Galaxy S(まだ2.2.1を我慢しながら開発に使用中)とXPERIA ARCでは、逆さ横持ちの状態で画面の回転に応答しないようにすると、こちらで触れたコードでは(当然ですが)画面が逆になってしまいます。SCREEN_ORIENTATION_REVERSE_LANDSCAPEにしないといけないからです。で、次のコードにしました。(逆さの横持ち、縦持ちの定義はos2.3以降にしかないので、それより前の端末ではその状態をサポートしているものがあったら、Webによるとあるようですが、下記のコードでは対応できません。Galaxy Sもそうです。)
    public static void setFixedOrientation(Activity activity,Context context,boolean fixed)
{
if(fixed)
{
Configuration config = context.getResources().getConfiguration();
int orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; // warning回避
Display display = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
boolean use_reverse_mode = false;
if(Build.VERSION.SDK_INT >= 9 && (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270))
{
use_reverse_mode = true;
}
if(config.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
if(use_reverse_mode)
{
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
}
else
{
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
}

}
else if(config.orientation == Configuration.ORIENTATION_PORTRAIT)
{
if(use_reverse_mode)
{
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
}
else
{
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
}
activity.setRequestedOrientation(orientation);
}
else
{
//this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}

それから、端末の回転対応についてはこちらも必見です。

 












管理者にだけ表示

トラックバック URL↓
http://nekonotesoft.net/tb.php/189-c72ae4e9