0

我知道我可以在我的 res/ 文件夹中创建一个名为 layout-land 的文件夹,Android 会自动处理它。我的问题是,当我的方向从纵向变为横向时,如果我想调用一个新的 Activity 怎么办?

我有的:

  • 由按钮和滚动视图组成的肖像 xml 文件
  • 包含多个按钮、文本视图和编辑文本的横向 xml 文件
  • 两者都称为 main.xml (但在它们各自的文件夹中)
  • 一个调用 setContentView(main.xml) 的 Activity

但是,此活动必须初始化所有按钮、文本视图等,但是当我将方向更改回纵向时,它会强制关闭,因为这些按钮不在该 xml 文件中!

我怎样才能解决这个问题?

4

2 回答 2

1

尝试使用getResources().getConfiguration().orientation来检查当前方向。因此,当您倾斜设备时,您可以避免膨胀错误的资源。

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

另一种(但不好!)方法可能是 override onConfigurationChanged,因此您的土地布局将不会被使用,并且您可以在倾斜时推动另一个活动。就像是:

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

但我不会向你推荐这个。尝试第一种方法,并告诉我这是否适合您。;)

于 2012-05-08T13:00:49.933 回答
0

Thomas 的解决方案应该有效,但也知道如果纵向和横向模式共有的按钮执行相同的操作,您可以在尝试强制转换/分配之前检查 findViewByID(...) 是否为空。从 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
}

请注意,我仍然会使用 Thomas 的解决方案,因为这样您只需要检查一个属性,而不是必须在布局之间不同的每个控件上检查 null。

于 2012-05-08T13:20:40.633 回答