2011-06-23 19 views
1

私はAndroidのスターターで、ポートレートとランドスケープの画面に異なるレイアウトファイル(main.xml)を使用する方法を理解しようとしています。android layout-land and onConfigurationChanged

res/layoutとres/layout-landの両方にmain.xmlを置いて、プロジェクトを再構築しようとしました。しかし、これは私にとってはうまくいかない。

次に、コードでConfigurationChangedメソッドを追加し、R.layout.mainでsetContextViewを追加しました。今回私は、さまざまな方向で異なる画面レイアウトを得ましたが、すべての機能が失われました。一部の投稿では、onConfigurationChangedメソッドの使用は実際には最良のアイデアではないとも述べています。

誰でもこの問題を解決できますか?

おかげで、あなたのAndroidManifest.xmlに

答えて

1

Androidは、現在のデバイスの現在の状態を表すレイアウトを自動的に使用します。特定のプロジェクトでは、デバイスが回転するときにlayout-land xmlファイルを使用する必要があります。 onConfigurationChangedメソッドをオーバーライドしてマニフェストを変更すると、特に新しいレイアウトがロードされるようにするために、私はお勧めしないコンフィグレーション変更をAndroidで処理します。

ここでは、さまざまなレイアウトをテストするために必要な作業について説明します。あなたのレイアウトフォルダにmainと呼ばれるXMLファイルを置きます。レイアウトについては、親を青の背景で塗りつぶすLinearLayoutを使用してください。 mainというXMLレイアウトファイルを作成し、layout-landフォルダの下に置きます。このレイアウトでは、赤い背景を使用します。

アプリを起動してデバイスを回転すると、背景の色が変わるのがわかります。これは、アクティビティが破棄され、新しいレイアウトで再開されるためです。

2

移動して、あなたのアクティビティタグに次の行を追加します

android:configChanges="orientation"

これはあなたがあなたの活動配向状態を制御したいのAndroidに伝えます変更。通常、オリエンテーションの変更があると、Androidは実際にあなたの活動を破壊し、onCreate()の手段で再作成します。したがって、状態がメソッドに保存されていない限り、取得されたデータは失われます。

+0

私は状態が 'onConfigurationChangedd()'の代わりに 'onSaveInstanceState()'に保存されるべきだと思います。 – CopsOnRoad

0

問題を解決するためにonRetainNonConfigurationInstance()メソッドとgetLastNonConfigurationInstance()メソッドを使用してください。 また、上記のsloutionをjrobinson3k1によって指定することもできます。 Thanx。