android:configChanges="orientation|keyboardHidden|screenSize"
画面の回転が横向きから縦向きに、またはその逆に変わったときにアクティビティが再び開始されないよう
に使用しています。
私はいくつかのコードのアイデアを持っているので、私は自分の問題を解決しますが、そのために、向きonCreate()
でconfidChangesを使用していますが、アクティビティの画面の向きを確認できる方法はありますか???
4 に答える
Activity の onConfigurationChanged メソッドを使用します。次のコードを参照してください。
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
また、マニフェスト ファイルの適切な要素を編集して、android:configChanges を含める必要があります。以下のコードを参照してください。
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
注: Android 3.2 (API レベル 13) 以降では、デバイスが縦向きと横向きに切り替わると、「画面サイズ」も変わります。したがって、API レベル 13 以降の開発時に向きの変更によるランタイムの再起動を防ぎたい場合は、decalare を行う必要があります。
android:configChanges="orientation|screenSize" for API level 13 or higher .
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orient = display.getOrientation();
switch(orient) {
case Configuration.ORIENTATION_PORTRAIT:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
break;
case Configuration.ORIENTATION_LANDSCAPE:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
break;
}
}
これを確認してください。画面の向きが検出されます。マニフェストで言及する必要はありません。向きを取得できます。
OrientationEventListener _orientaion = new OrientationEventListener(
MainActivity.this) {
@Override
public void onOrientationChanged(int arg0) {
System.out.println("Wortking");
}
};
_orientaion.enable();
これが役立つと思います。
getResources().getConfiguration().orientation
画面の向きが分かるので、どんな場所でも使えます。
onConfigurationChanged(Configuration newConfig)
また、アクティビティの実行中に方向の変更を処理するためにオーバーライドします
更新:ドキュメント
から:
いくつかの特殊なケースでは、1 つ以上のタイプの構成変更に基づいて、アクティビティの再開をバイパスしたい場合があります。これは、マニフェストの android:configChanges 属性で行われます。そこで処理すると言うあらゆるタイプの構成変更について、再起動される代わりに、現在のアクティビティの onConfigurationChanged(Configuration) メソッドへの呼び出しを受け取ります。