安卓屏幕方向改变

5
我的选项卡应用在屏幕方向改变后无法重新显示视图。
我添加了

android:configChanges="keyboardHidden|orientation"

将此代码添加到主选项卡活动和清单中的每个活动。

我已经给每个活动添加了这个方法:

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.active_alt);
    mColorLegendBtn = (Button) findViewById(R.id.colorbtn);
    mStatusView = (TextView) findViewById(R.id.celltitle1);
    TextView mStatusView1 = (TextView) findViewById(R.id.celltitle2);
    mStatusView1.setText(mStatusView1.getText()+"testcase1");
    mStatusView.setText(mStatusView.getText()+"testcase");
    initUI();
}

public void initUI() {
    l1 = (ListView) findViewById(R.id.ListView01);
    EfficientAdapter efficientAdapter = new EfficientAdapter(mContext);
    l1.setAdapter(null);
    l1.setAdapter(efficientAdapter);
}

启动时,标签、列表、按钮和文本视图都显示正确。当我在模拟器中更改方向时,只有标签显示出来,其他小部件都没有显示,屏幕变黑了。

我错过了什么吗?


我曾经遇到过非常类似的问题,并找到了另一种解决方法。它在几个不同的实例中表现出来。请查看我的问题此处 - Jarrod Smith
4个回答

5

我曾经遇到过这个问题。经过多次尝试和错误,最终通过对清单文件进行一行修改来解决了它。

诀窍在于添加:

android:configChanges="orientation|keyboardHidden"

TabActivity 的入口添加到清单中。不要更改任何子活动,甚至不用在 TabActivity 中实现 onConfigurationChanged()
我不知道为什么这样似乎有效,但效果是布局会被刷新,并且选项卡和子活动内容都能在新的方向中正确地重绘。

如果我们在清单文件中编写了上述代码,则它将不会从layout-land文件夹中获取xml。 - RobinHood

1
成功后,我发现最好的控制屏幕更改的方法是将您的布局xml为横向模式单独放在另一个xml中,像这样:
res/layout-land/youractivity.xml

使用 /layout/ 和 /layout-land/ 作为您的布局,以及 Graham Borland 的答案是非常宝贵的。

  <activity android:name=".MainActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="unspecified"
                  android:launchMode="standard"
                  android:configChanges="orientation|keyboardHidden"
                  >

上面的代码片段是让我的工作正常的。:)

哦,我相信“未指定”的部分是让系统做出最佳决策的关键...

祝你好运!


还有其他需要添加的吗?我已经添加了res/layout-land/main.xml,但在横屏模式下它没有刷新视图。仍然显示的是竖屏布局。 - iamtheexp01
尝试添加以下属性:android:screenOrientation="unspecified"试试看,然后告诉我。 - Lenn Dolling

1
在使用目标API大于13的Mono for Android中,我发现应该放在命名空间内但在Activity class之外的那一行:
[Activity (Label = "Viewer",  ConfigurationChanges = ConfigChanges.Orientation|ConfigChanges.ScreenSize)]

即使未更改清单,也会导致触发OnConfigurationChanged()


0

可能是你的布局在横屏/竖屏模式下不起作用?尝试在旋转后启动应用程序,检查是否会产生相同的结果。如果是这样:修复你的布局:D


该应用程序可以在两个方向上运行。当屏幕方向改变时,它不会重新显示。 - Tori
选项卡...您是否使用了带有自己活动的选项卡活动?您是否还在TabActivity中添加了代码?我建议添加一些日志以检查调用了哪些onconfigchanged函数以及何时调用。 - Nanne
是的,我已经将onconfigchanged添加到了tabactivity中,并且通过日志可以看到onconfigchanged在tabactivity和正在显示的activity中都被调用了。问题在于视图没有显示出来。 - Tori
抱歉,我已经没有更多的想法了。如果您添加更多的代码,也许有人能看出问题所在?在我看来,这看起来很好,但不知道您的tabHost和所有其他内容发生了什么。 - Nanne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接