14

マニフェストでは、縦向きに制限されたアクティビティを設定しました。しかし、私は条件に応じてこの制限を取り除く必要があります。では、プログラムで方向制限を削除するにはどうすればよいですか?

upd:私の現在の設定は次のとおりです。

    <activity
        android:name=".activity.MainActivity"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar"
        android:screenOrientation="portrait"
        android:configChanges="orientation">


 /**
 * Defines whether the device being used is a tablet and if so adds horizontal orientation option.
 */
     protected void _updateScreenOrientationModes(){
         if(((MyApplication) getApplication())._isTablet == true)
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
         }
4

3 に答える 3

19

android:screenOrientationマニフェストで設定したかどうかに関係なく、 Activity.setRequestedOrientation()を使用してプログラムで方向を設定できます。

本質的に、「制限の解除」は次の方法で実現されます。

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

その後、アクティビティは、物理デバイスの向きが変更されたときに画面の向きを変更するデフォルトの動作を示します。

ただし、実際には、現在の物理デバイスの向きを同時に一致させたい場合があります。試したことはありませんが、上記の操作を行っただけで、デバイスが物理的に横向きになっている場合は、デバイスを物理的に動かすまでポートレートモードのままであると確信しています。ポートレートに戻り、ランドスケープに戻ります。

私が行うことは、マニフェストに設定し、 Activity.onConfigurationChanged()android:configChanges="orientation"をオーバーライドすることです。これにより、条件に応じて、方向の変更を実行するか、方向をキャッシュすることができます。そうすれば、状態が変化するたびに、現在の物理的な向きが手元にあるので、必要に応じてその時点でそれを変更できます。

于 2012-05-31T08:50:36.860 に答える
2

あなたが尋ねたより一般的な質問に対処するので、私は他の答えを残すつもりです。しかし、あなたが言った他の誰かへのコメントで:

タブレットに向きと受話器のみの縦向きの両方を許可する必要があります

特定のケースは、実際には一般的なケースよりも簡単です。デフォルトの動作を許可するには、マニフェストからとの両方android:screenOrientation="portrait"を削除します。android:configChanges="orientation"次に、起動時に、デバイスが受話器の場合は、

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

デバイスは明らかに実行時にタブレットと携帯電話の間で変わることはないので、起動時に一度だけこれを行う必要があります。タブレットはデフォルトの動作を取得するため、デバイスの物理的な向きに関係なく、タブレットが使用します。受話器は強制的に縦向きになり、そのままになります。

于 2012-05-31T09:13:16.740 に答える
1

プログラムでは、「setRequestedOrientation()」を使用して画面の向きを変更できます

Javaクラスで、必要な条件に従って次のコードを記述します。

ポートレートモードに変更するには、ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE定数を使用します。

     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ポートレートモードに変更するには、ActivityInfo.SCREEN_ORIENTATION_PORTRAIT定数を使用します。

   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
于 2012-05-31T08:04:25.790 に答える