2011-08-16 9 views
0

Androidデバイスの現在の向きに適した特定のアクティビティのビューのレイアウトを持つことができるようにデバイスを回転させるときに、単に設定を変更しようとしていますが、これを達成するための最良の方法について混乱しています。オリエンテーションが変更されたときのレイアウトの変更はどのように処理されますか?

私は次のアンドロイドのドキュメントを参照している:

Handling Runtime Changes

私はので、私は本当にonRetainNonConfigurationInstance()メソッドを使用する必要はないと思う私の活動から任意のデータを保存する必要はありません。 onConfigurationChanged()メソッドを使用して向きの変更を自分自身で処理しようとしましたが、そこで現在の向きを見つけて必要に応じてレイアウトを設定しましたが、これはもはや動作しないビューになります。 onConfigurationchanged()で何か他に必要なことはありますか?

肖像画とは対照的に、感謝

答えて

2

は景観のために別のビューを取得するには、次のリソースフォルダの両方であなたのレイアウトXMLファイルを配置します:

/RES /レイアウト - 肖像

/res/layout-land - Landscape

これはもちろん、両方で同じビューを持っていれば、そうでないとNullPointerExceptionsが発生する可能性があります。

1

あなたのプロジェクトのresフォルダには、レイアウトフォルダが必要です。 resに新しいフォルダを作成し、それをレイアウトランドと呼んでください。横向きのデバイスに固有のlayout.xmlファイルの2つ目のセットを作成します。それらをこのレイアウトランドフォルダに保存します。残りの部分はシステムが処理します。

check out this pageを入力し、resフォルダに使用できるさまざまな修飾子の詳細については、「Alignative Resourcesの提供」までスクロールしてください。

編集:あなたはどのデバイスを使用していますか?私はhello worldだけでなく、res/layout-landフォルダに格納されたレイアウトとは異なるテキストを表示する、簡単なテストプロジェクトを作成しました。 マニフェストにconfigChanges="orientation"を付けずに1回試しました。私は、アプリを実行し、方向を切り替えると、レイアウトは期待どおりに動作します。レイアウトランドからのレイアウトは、デバイスが横長の場合に表示され、デバイスが縦長の場合にプレーンレイアウトフォルダからのレイアウトが表示されます。

私がテストしたデバイスはSidekick 4gです。 Download the test projectを入力し、必要に応じてデバイスでどのように動作するかを報告してください。

+0

ありがとうございます、悲しいことに、動作していないようです。オリエンテーションの変更では、古いレイアウトだけが保持されます。新しいビューは追加されず、削除されず、ただ再配置されます。私は、私の活動を再開したくないので、マニフェストにconfigChanges = "orientation"を含める必要があります。これはなぜ私が望む結果が見えないのですか? – Kerry

+0

どのデバイスを使用していますか、私の編集を参照してください。 – FoamyGuy

+0

Timに感謝します。私はあなたが元々コーディングしたようにそれを試しました、そして、実際には動作します。しかし、私はAndroidがオリエンテーションの変更を処理するために動作することを認識しました。自分のアプリでは、アクティビティを再開したくないので、向きが変わったときにAndroidをオーバーライドします。助けてくれてありがとう。 – Kerry

2

"res \ layout-land"と呼ばれる新しいディレクトリを作成し、同じ名前の "res \ layout"と "res \ layout-land"の両方で.xmlレイアウトファイルを作成できます。例: "myLayout.xml" Androidはlandsacpeの向きでは-landディレクトリから、似ているときは自動的にレイアウトを使用します。

関連する問題