Android,Tabhost的方向问题,这很奇怪

时间:2011-07-21 01:49:54

标签: android configuration orientation android-tabhost

大家。

我创建了一个Tabhost,它上面有4个按钮。

我在清单文件中的每个Activity上设置了android:configChanges =“orientation | keyboardHidden”。

我还会覆盖onConfigurationChanged方法,以便在屏幕定向时监听事件。

现在有一个“Bug”,我不知道如何解决它。

当我点击其中一个按钮(例如,A,B,C和D)时,我将平板电脑的方向从纵向旋转到横向,活动就可以了。它的onConfigurationChanged方法有效。

但是当我在横向模式下单击B按钮时,它的纵向状态仍然保留(我想要调用B按钮的onConfigChanged方法,但它没有)。总之,如果您更改了方向,并单击另一个Tab按钮,则不会调用Activity的onConfigurationChanged方法。

我该如何解决这个问题?非常感谢。

4 个答案:

答案 0 :(得分:0)

你不能为onConfigChanged()调用视图或任何类型的回调,据我所知,它只能从设备调用。除了这个评论,我没有任何想法。

答案 1 :(得分:0)

尝试删除该行:

super.onConfigurationChanged(newConfig);
来自onConfigurationChanged()函数的

。如果这不能解决问题,请发布您打开的内容/当您点击任何标签时会发生什么,以便我们能够意识到可能导致问题的原因。


但是,执行您所尝试的操作的最佳方法是将drawable放在资源下的正确目录中,并为两者使用相同的名称。这样你就不需要指定用于不同配置的drawable,而是让android OS为你做这个。将一个放在drawable目录中,将另一个放在drawable-landdrawable-port中,具体取决于默认方向。您可以阅读有关如何提供资源的更多信息,并在此处Providing Resources

指定它们的使用时间

答案 2 :(得分:0)

感谢您的回复。现在我终于知道我的程序出了什么问题。

因为我使用的是TabHost,当屏幕方向改变时,只会调用两个活动的onConfigurationChanged方法。

例如,有一个Activity是TabHost的容器。还有其他四个活动(A,B,C和D)是TabHost活动的一部分。

因此,当使用活动A更改屏幕方向时,将仅调用TabHost和Activity A的onConfigurationChanged方法。其他人不会被召唤。

这就是为什么当屏幕从纵向更改为横向时。 A的onConfiguration已更改,但是当您单击其他选项卡按钮时,B,C和D将不会更改(仍然看起来像横向模式下的肖像)。

所以答案是你必须控制TabHost活动的配置方法。现在效果很好。

如果您使用的是Tabhost,则必须注意这一点。

答案 3 :(得分:0)

我找到了类似问题的解决方案。

我正在使用tabhost,并希望能够旋转4个标签中的3个,并且只能将1个标签设置为纵向模式。以前(在应用此修复之前)3个选项卡将旋转,直到选择固定纵向选项卡,然后它们全部陷入纵向模式。

我必须设置其他标签以使用USER的方向来解决此问题。即在其他3个选项卡的onResume中添加setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);,它现在完全按照我的预期工作。现在将根据用户的设备方向旋转3个选项卡,并且1个选项卡是固定的纵向。 :)