4

レイアウトの作成に苦労しています。私の状況はこれです:

私はActivity実行し、通常と風景の両方に定義されたレイアウトを持っていますが、onCreate().

onCreate()私は呼び出しを行い、setContentView(my_normal_layout)多くのなどを使用して追加され、addView()正常に動作します。ただし、ランドスケープレイアウトも構築しようとしていますfindViewById()が、レイアウトファイルの一部であるベースレイアウトを取得しようとすると、res/layout-landが返されるという問題がありますnull

今、私はヌルリターンの問題を抱えている人々のための解決策を見てきましたが、人々はそれをsetContentView最初に実行する必要があることを示唆しています. ただし、コンテンツ ビューを横向きのレイアウトに設定したくありません。画面が回転したときにのみ発生させたいのです (これは自動的に行われますか?)。

findViewByIdコンテンツビューとして設定されていないビューを使用および変更するというこの問題を回避する方法を知っている人はいますか?

必要なコード行を投稿できますが、説明が十分であることを願っています。ありがとう、

ジョシュ

4

1 に答える 1

4

私が正しく理解していれば、2つの異なるレイアウトファイルに異なるUI要素があります。

その場合でも、レイアウトファイルに同じ名前(1つと1/res/layoutつ)を付けて、正しいファイルを自動的に膨らませるために/res/layout-land使用できます。setContentView(...)

その後、コードのどのビットを呼び出すかを知るために知っておく必要があるのは、現在の向き(縦向きまたは横向き)だけfindViewById(...)です。

オリエンテーションは...を使用して見つけることができます

getWindowManager().getDefaultDisplay().getOrientation();

API 8(Android v2.2)以降を使用している場合、上記は非推奨ですが、のgetRotation()代わりに呼び出す必要がありますgetOrientation()

Display.getOrientation()を参照してください

于 2012-04-23T23:34:11.703 に答える