0

res /フォルダーにlayout-landというフォルダーを作成でき、Androidがこれを自動的に処理することを知っています。私の問題は、向きが縦向きから横向きに変わったときに新しいアクティビティを呼び出したい場合はどうなりますか?

私が持っているもの:

  • ボタンとスクロールビューで構成される縦向きのxmlファイル
  • 複数のボタン、テキストビュー、および編集テキストを含む横向きのxmlファイル
  • どちらもmain.xmlと呼ばれます(ただし、それぞれのフォルダーにあります)
  • setContentView(main.xml)を呼び出す1つのアクティビティ

ただし、このアクティビティではすべてのボタンやテキストビューなどを初期化する必要がありますが、向きを縦向きに戻すと、これらのボタンがそのxmlファイルにないため、強制的に閉じます。

どうすればこれを回避できますか?

4

2 に答える 2

1

getResources().getConfiguration().orientation現在の向きを確認するために使用してみてください。したがって、デバイスを傾けるときに間違ったリソースを膨らませるのを避けることができます。

-> http://developer.android.com/reference/android/content/res/Configuration.html#orientation

別の(しかし悪い!)アプローチはオーバーライドすることである可能性がありますonConfigurationChanged。そのため、ランドレイアウトは使用されず、傾斜時に別のアクティビティをプッシュできます。そのようなもの:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    //push new activity via intent
}

しかし、私はあなたにこれをお勧めしません。最初のアプローチを試してみて、これがうまくいったかどうか教えてください。;)

于 2012-05-08T13:00:49.933 に答える
0

トーマスのソリューションは機能するはずですが、ポートレート モードとランドスケープ モードの両方に共通のボタンが同じことを行う場合、キャスト/割り当てを試みる前に findViewByID(...) が null かどうかを確認するだけでよいことも知っています。findViewByID(...) のドキュメントから、次のThe view if found or null otherwise.ようなものが機能するはずです。

Object x = findViewByID(R.id.something) != null;
if(x != null)
{
    //cast it to whatever it really is (textview, button, etc)

    //Add whatever listeners you want
}

レイアウト間で異なる各コントロールでnullをチェックするのではなく、1つのプロパティをチェックするだけでよいため、私はまだThomasのソリューションを使用します。

于 2012-05-08T13:20:40.633 に答える