Android縦画面の問題


Androidの縦横画面で解決すべき問題は2つです.
一.レイアウトの問題
二.問題の再読み込み
1.レイアウトの問題:ソフトウェアを縦横画面に切り替えたくない場合は、最も簡単な方法はプロジェクトのAndroid Manifestです.xmlで指定したactivityにandroid:screenOrientationプロパティを追加します.次のパラメータがあります.
「unspecified」:デフォルト値はシステムによって表示方向を判断する.判定のポリシーは機器に関するものであるため、機器によって表示方向が異なる.「landscape」:横スクリーン表示(幅比高さ)「portrait」:縦スクリーン表示(高さ比幅が長い)「user」:ユーザーの現在の優先方向「behind」:このActivityの下にあるActivityの方向と一致する(Activityスタック内の)「sensor」:物理的なセンサーで決定されます.ユーザーがデバイスを回転させると、この画面は縦横に切り替わります.「nosensor」:物理センサは無視され、ユーザーがデバイスを回転させるにつれて変更されません(「unspecified」設定を除きます).
JavaコードではsetRequestedOrientation(Activity Info.SCREEN_ORIENTATION_LANDSCAPE)で設定することもできます.
ソフトウェアを縦横画面に切り替える場合は、縦横画面の幅が大きくなるため、異なるレイアウトが必要になる場合があります.次の方法でレイアウトを切り替えることができます.
1)resディレクトリの下にlayout-landとlayout-portディレクトリを作成し、対応するlayoutファイルはmain.xml.Layout-landは横画面のlayout、layout-portは縦画面のlayoutで、他のものは気にしないで、シミュレータは自動的に探します.
2)thisを通過する.getResources().getConfiguration().orientationは、現在横画面なのか縦画面なのかを判断し、対応するxmlレイアウトファイルをロードします.スクリーンが横画面になると、現在のActivityのonCreateメソッドが再コールされるので、以下のメソッドをonCreateに置いて現在の方向を確認し、setContentViewに異なるlayout xmlをロードすることができます.
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){ 
    Log.i("info", "landscape"); //   
} 
else if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) { 
    Log.i("info", "portrait"); //   
}

onConfigurationChanged()メソッドでもハードキーボードを持つキーボードの状態を検出できます
//         :         
if (newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_NO){
   //          ,            
}
else if (newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_YES){
   //          ,            
}

2.問題を再読み込みします.新しくロードする必要がなければAndroidManifestで入手できます.xmlに配置android:configChanges="orientation|keyboardHidden"を加え、android:configChangesを配置する役割は、ドキュメントで言うように、Specify one or more configuration changesthat the activity will handle itselfである.If not specified, the activity will berestarted if any of these configuration changes happen in the system.これにより、プログラム内でActivityはonCreate()を繰り返したり、onPause、onResumeを呼び出したりすることはありません.onConfigurationChanged(Configuration newConfig)は1つだけ呼び出されます.再読み込みが必要な場合は、変更する必要はありません.ただし、再読み込み中に前の操作内容やデータを保存する必要がある場合は、前のデータを保存する必要があります.そしてactivityのonCreate()から取り出します.もちろん、android:configChanges()を設定することはできません.そうしないと、onCreate()メソッドは呼び出されません.
反転を完全に禁止するには、android:screenOrientationのプロパティをnosensorに設定すると、重力誘導によるトラブルを無視できます.しかし、シミュレータでは役に立たず、本物では正しい.android:screenOrientation="portrait"
携帯電話がどのように変動しても、この属性を持つactivityは縦画面表示になります.
Android:screenOrientation=「landscape」は、横画面に表示されます.
ここでは、Androidシミュレータでは、ショートカットキー「Ctrl+F 11/F 12」で画面を切り替えることができます
Activityの現在の表示方向は、コンフィギュレーションオブジェクトによって取得することもできます.
 //   Configuration           
       Configuration conf = getResources().getConfiguration(); 
       String orientName = "undefined"; 
       switch (orient) { 
       case Configuration.ORIENTATION_LANDSCAPE:
           orientName = "landscape"; 
       case Configuration.ORIENTATION_PORTRAIT: 
           orientName = "portrait"; 
       case Configuration.ORIENTATION_SQUARE:
          orientName = "square"; 
      default:
          orientName = "undefined"; 
      }
  
  Logger.get().i("conf.orient:" + orientName);