动态更改android:configChanges

时间:2011-08-30 16:14:38

标签: android android-fragments android-viewpager

我正在创建一个使用ViewPager并在不同WebView上滚动的杂志应用。 大多数页面都是纵向的,但有些页面可以看作是风景。

为了解决这个问题,我在Activity举行ViewPager时使用了两种方法:

public void allowOrientationChanges() {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

public void enforcePortrait() {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

有了这个,我们确保所有需要肖像的页面保持纵向(调用getActivity().enforcePortrait()),并且具有纵向/横向视图的页面将经历整个重启过程(调用getActivity().allowOrientationChanges() )。

我们想要在某些杂志的页面上添加视频。很遗憾,HTML5视频代码无法正常工作,因此我们在布局中添加了VideoView。 现在添加的功能是:

  • in portrait:在某个地方显示视频。 (完成!
  • in landscape:将视频设为全屏(如youtube应用)。

我一直在尝试这样做,我找到的唯一方法是更改​​VideoViewonConfigurationChanged()方法中Activity的大小并通知fragment配置发生了变化。这样做的问题是向android:configChanges="orientation|keyboardHidden"添加Activity将“禁止”重新创建视图。

我想到的两种可能的解决方案:

  1. 从代码中更改android:configChanges,具体取决于页面,但我无法找到该调用是否存在。
  2. 强制在onConfigurationChanged()方法上重新创建。我不知道如何强制重新创建fragment
  3. 有什么想法吗?

3 个答案:

答案 0 :(得分:2)

也许通过在清单中使用类似名称定义活动两次并将第二个化身设置为enabled = false,可以解决这个问题。然后通过调用PackageManager.setComponentEnabledSetting(....)来动态地切换2个活动,这只是一个想法,但不确定它是否会起作用。

答案 1 :(得分:2)

  

我正在创建一个杂志应用程序,它使用ViewPager并滚动浏览不同的WebView。

这可靠吗?

  

大多数页面都是纵向的,但有些页面可以看作是风景。

请允许以横向方式查看所有页面。如果您的用户希望以横向方式查看您的应用程序 - 例如,他们不想仅仅为了使用您的应用而将电视转向侧面 - 请让他们使用。

  

有什么想法吗?

在活动的onResume()中,让它通知杂志页面片段根据当时VideoViewConfiguration)修正其getResources().getConfiguration()尺寸/位置

答案 2 :(得分:1)

我刚修好了。谢谢你的回答。

我的解决方案是让Activity拥有android:configChanges="orientation|keyboardHidden"标志。

在执行此操作后,我会覆盖onConfigurationChanged()内的Fragment方法,我会调整WebViewVideoView的大小,具体取决于我需要的内容。

编辑:

我刚刚对此做了blog post