适用于Android的不同方向的新活动

时间:2012-05-08 12:54:25

标签: java android android-layout orientation landscape-portrait

我知道我可以在res /文件夹中创建一个名为layout-land的文件夹,Android会自动处理。我的问题是,如果我的方向从portait变为landscape,我想调用一个新的Activity? 我有什么:

  • 包含按钮和滚动视图的纵向xml文件
  • 包含多个按钮,textviews的横向xml文件 和edittexts
  • 两者都被称为main.xml(但在他们尊重的文件夹中)
  • 一个调用setContentView(main.xml)
  • 的Activity

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

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

2 个答案:

答案 0 :(得分:0)

尝试使用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
}

但我不建议你这样做。尝试第一种方法并告诉我这对你有用。 ;)

答案 1 :(得分: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。