【问题标题】:Android, Orientation Question with Tabhost and it's Very strangeAndroid,Tabhost 的方向问题,这很奇怪
【发布时间】:2011-10-09 21:00:09
【问题描述】:

每个人。

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

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

而且我还重写了 onConfigurationChanged 方法来监听屏幕定向时的事件。

现在有个“Bug”,不知道怎么解决。

当我单击 4 个按钮之一(例如,A、B、C 和 D)并将平板电脑的方向从纵向旋转到横向时,Activity 很好。它的 onConfigurationChanged 方法有效。

但是当我在横向模式下单击 B 按钮时,它的纵向状态仍然保持(我希望调用 B 按钮的 onConfigChanged 方法,但它没有)。总之,如果你改变了方向,再点击一个Tab按钮,Activity的onConfigurationChanged方法就不会被调用。

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

【问题讨论】:

  • 更改标签时会发生什么变化?你打开另一个活动吗?在网页视图中打开页面?你能提供更多信息吗...
  • 能否请您发布 onCofigurationChanged 函数的代码?
  • 这是我的 onConfigurationChanged 示例 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (getScreenOrientation() == Configuration.ORIENTATION_PORTRAIT) { content.setImageResource(R.drawable.how_portrait); } else { content.setImageResource(R.drawable.how_landscape); } }

标签: android configuration orientation android-tabhost


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    因为我使用的是TabHost,所以当屏幕方向改变时,只有两个Activity的onConfigurationChanged方法会被调用。

    例如,有一个 Activity,它是 TabHost 的容器。还有其他四个Activity(A、B、C、D)是TabHost Activity的组成部分。

    所以当 Activity A 改变屏幕方向时,只会调用 TabHost 和 Activity A 的 onConfigurationChanged 方法。不会调用其他人。

    这就是当屏幕从纵向更改为横向时的原因。 A的onConfiguration改变了,但是当你点击其他选项卡按钮时,B、C和D不会改变(在横向模式下仍然看起来像Portrait)。

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

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

    【讨论】:

      【解决方案3】:

      尝试删除该行:

      super.onConfigurationChanged(newConfig);
      

      来自您的 onConfigurationChanged() 函数。如果这不起作用,请发布您打开的内容/单击任何选项卡时发生的情况,以便我们了解可能导致问题的原因。


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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多