动态更改 android:configChanges

Mac*_*rse 6 android android-fragments android-viewpager

我正在创建一个杂志应用程序,它使用 aViewPager并滚动不同的WebViews。大多数页面是纵向的,但有些页面可以看到横向的。

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

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

public void enforcePortrait() {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Run Code Online (Sandbox Code Playgroud)

这样,我们确保所有只需要纵向的页面保持纵向(调用getActivity().enforcePortrait()),而具有纵向/横向视图的页面经历整个重新启动过程(调用getActivity().allowOrientationChanges())。

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

  • 纵向:在某个位置显示视频。(完毕!
  • 横向:使视频全屏显示(如 YouTube 应用程序)。

VideoView我一直在尝试这样做,我发现的唯一方法是更改​​方法中onConfigurationChanged()的大小Activity并通知fragment配置已更改。这样做的问题是添加android:configChanges="orientation|keyboardHidden"Activity“禁止”重新创建视图的意愿。

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

  1. 从代码中更改android:configChanges并根据页面,但我找不到该调用是否存在。
  2. 强制重新创建该onConfigurationChanged()方法。我不知道如何强制重新创建fragment.

有任何想法吗?

Mac*_*rse 2

我刚刚修好了。感谢您的回答。

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

完成此操作后,我会根据需要重写调整大小或的onConfigurationChanged()内部的方法。FragmentWebViewVideoView

编辑:

我刚刚写了一篇关于此的博客文章