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をロードすることができます. 
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に設定すると、重力誘導によるトラブルを無視できます.しかし、なぜかシミュレータでは役に立たず、本物では正しい.