Android縦画面まとめ
作者:黄鑫刚
Androidの縦横画面で解決すべき問題は2つです.1つです.レイアウトの問題;二.問題を再読み込みします.
1.レイアウトの問題:ソフトウェアを縦横画面に切り替えたくない場合は、最も簡単な方法はプロジェクトのAndroid Manifestです.xmlで指定したactivityにandroid:screenOrientationプロパティを追加します.次のパラメータがあります.
「unspecified」のデフォルト値はシステムによって表示方向を判断する.判定のポリシーは機器に関するものであるため、機器によって表示方向が異なる.
「landscape」の横画面表示(幅比の高さ)
「portrait」縦画面表示(高さ比幅)
ユーザーの現在の優先方向
「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をロードすることができます.
2.問題を再読み込みします.新しくロードする必要がない場合はandroidmanifest.xmlに配置android:configChanges="orientation"を加える、android:configChangesを配置する役割は、文書で言うように、Specifyone or more configuration changes that the activity will handle itselfである.If notspecified, the activity will be restarted if any of these configuration changeshappen in the system.このようにプログラムでは.Activityは、onCreate()を繰り返したり、onPauseを呼び出したりしません.onResume.onConfigurationChanged(ConfigurationewConfig)は1つだけ呼び出されます.
-*********実はここで2つの奇妙な問題に遭遇しました.それは
1.android:configChangesでorientationのみを設定しても、orientation|keyboardHiddenが設定されている場合にのみ、onConfigurationChanged(ConfigurationnewConfig)が1つだけ呼び出されます.
2.横画面が縦画面になると2回onConfigurationChangedを呼び出すが、縦画面が横画面に変わると1回だけonConfigurationChangedを呼び出すのはおかしい.もしあなたが知っているならば、伝言を歓迎して共に*****************を検討します–
再読み込みが必要な場合は、変更する必要はありません.ただし、再読み込み中に前の操作内容やデータを保存する必要がある場合は、前のデータを保存する必要があります.そしてactivityのonCreate()から取り出します.もちろん、android:configChanges()を設定することはできません.そうしないと、onCreate()メソッドは呼び出されません.では、データはどこに保存できますか?Androidでは4つのストレージ方法が可能です.また、AndroidでonRetainNonConfigurationInstance()メソッドを提供してデータを一時的に保存することもできます.
次の例を示します.
一時画像を保存:
その後、activityのonCreate()関数で一時ファイルの再呼び出しを実現し、コードでシステムが一時ファイルを再ロードする必要があるかどうかを判断する必要があります.OnCreate()関数に一時ファイルをロードするコードを次に示します.
ほとんどの場合、このような操作は必要ありません.そのため、この行文を慎重に使用する必要があります.結局、最高の行為はすべての状況に適用されません.アプリケーションが悪いと、かえってプログラムに不要な面倒をもたらします.
反転を完全に禁止するには、android:screenOrientationのプロパティをnosensorに設定すると、重力誘導によるトラブルを無視できます.しかし、なぜかシミュレータでは役に立たず、本物では正しい.
Androidの縦横画面で解決すべき問題は2つです.1つです.レイアウトの問題;二.問題を再読み込みします.
1.レイアウトの問題:ソフトウェアを縦横画面に切り替えたくない場合は、最も簡単な方法はプロジェクトのAndroid Manifestです.xmlで指定したactivityにandroid:screenOrientationプロパティを追加します.次のパラメータがあります.
「unspecified」のデフォルト値はシステムによって表示方向を判断する.判定のポリシーは機器に関するものであるため、機器によって表示方向が異なる.
「landscape」の横画面表示(幅比の高さ)
「portrait」縦画面表示(高さ比幅)
ユーザーの現在の優先方向
「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");
}
2.問題を再読み込みします.新しくロードする必要がない場合はandroidmanifest.xmlに配置android:configChanges="orientation"を加える、android:configChangesを配置する役割は、文書で言うように、Specifyone or more configuration changes that the activity will handle itselfである.If notspecified, the activity will be restarted if any of these configuration changeshappen in the system.このようにプログラムでは.Activityは、onCreate()を繰り返したり、onPauseを呼び出したりしません.onResume.onConfigurationChanged(ConfigurationewConfig)は1つだけ呼び出されます.
-*********実はここで2つの奇妙な問題に遭遇しました.それは
1.android:configChangesでorientationのみを設定しても、orientation|keyboardHiddenが設定されている場合にのみ、onConfigurationChanged(ConfigurationnewConfig)が1つだけ呼び出されます.
2.横画面が縦画面になると2回onConfigurationChangedを呼び出すが、縦画面が横画面に変わると1回だけonConfigurationChangedを呼び出すのはおかしい.もしあなたが知っているならば、伝言を歓迎して共に*****************を検討します–
再読み込みが必要な場合は、変更する必要はありません.ただし、再読み込み中に前の操作内容やデータを保存する必要がある場合は、前のデータを保存する必要があります.そしてactivityのonCreate()から取り出します.もちろん、android:configChanges()を設定することはできません.そうしないと、onCreate()メソッドは呼び出されません.では、データはどこに保存できますか?Androidでは4つのストレージ方法が可能です.また、AndroidでonRetainNonConfigurationInstance()メソッドを提供してデータを一時的に保存することもできます.
次の例を示します.
一時画像を保存:
1. @Override
2. public Object onRetainNonConfigurationInstance() {
3. final LoadedPhoto[] list = new LoadedPhoto[numberOfPhotos];
4. keepPhotos(list);
5. return list;
6. }
その後、activityのonCreate()関数で一時ファイルの再呼び出しを実現し、コードでシステムが一時ファイルを再ロードする必要があるかどうかを判断する必要があります.OnCreate()関数に一時ファイルをロードするコードを次に示します.
1. private void loadPhotos() {
2. final Object data = getLastNonConfigurationInstance();
3.
4. // The activity is starting for the first time, load the photos from Flickr
5. if (data == null) {
6. mTask = new GetPhotoListTask().execute(mCurrentPage);
7. } else {
8. // The activity was destroyed/created automatically, populate the grid
9. // of photos with the images loaded by the previous activity
10. final LoadedPhoto[] photos = (LoadedPhoto[]) data;
11. for (LoadedPhoto photo : photos) {
12. addPhoto(photo);
13. }
14. }
15. }
ほとんどの場合、このような操作は必要ありません.そのため、この行文を慎重に使用する必要があります.結局、最高の行為はすべての状況に適用されません.アプリケーションが悪いと、かえってプログラムに不要な面倒をもたらします.
反転を完全に禁止するには、android:screenOrientationのプロパティをnosensorに設定すると、重力誘導によるトラブルを無視できます.しかし、なぜかシミュレータでは役に立たず、本物では正しい.