0

デバイスに応じて2つの異なる向きモードが必要です。デバイス画面が特大の場合、向きはLANDSCAPEであり、デバイス画面が小さい場合、向きはPORTRAITである必要があります。

私は次のチェックを行いました:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Set orientation for tablets and phones
    if (isXLarge()) {     
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    } else {    
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    setContentView(R.layout.activity_main); 
}

アクティビティのマニフェストエントリは次のとおりです。

<activity 
    android:configChanges="keyboardHidden" 
    android:launchMode="singleTop" 
    android:theme="@android:style/Theme.NoTitleBar" 
    android:name=".MyActivity"/>

携帯電話では正常に動作しますが、Android3.2を搭載したMotorolaXoomタブレットでは正しく動作しません。

タブレットが物理的にポートレートモードで保持されていると仮定すると、次の一連のアクションが発生します。

  1. アクティビティはポートレートモードで作成および表示されます-これは0.5秒間視覚的に表示されます
  2. アクティビティは破棄され、ランドスケープモードで再作成されます。

問題は、タブレットが現在物理的に保持されている方向に常に中間の遷移があり、その後、アクティビティが目的の方向で再作成されることです。

問題に関する情報やアドバイスをありがとうございます。詳細が必要な場合はお知らせください。

メソッドisXLarge()は、表示のタイプを正しく返します

4

1 に答える 1

1

方向の変更を自分で処理している場合、それを行うためのより良い方法android:configChanges="orientation"は、アクティビティのマニフェストでを宣言し、メソッドをオーバーライドするonConfigurationChanged()ことです。あなたの場合、onCreate()メソッドで向きを設定しますが、ユーザーが物理的に向きを変更すると、システムが向きを変更します。

をオーバーライドしonConfigurationChanged()てコードを実装し、正しい方向を提供することをお勧めします。

于 2012-09-10T14:58:56.693 に答える