4

我正在创建一个杂志应用程序,它使用 a并在不同的 s 上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布局中添加了一个。现在要添加的功能是:

  • 纵向:在特定位置显示视频。(完成!
  • 在横向:使视频全屏(如 youtube 应用程序)。

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

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

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

有任何想法吗?

4

3 回答 3

2

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

于 2011-08-30T16:53:43.540 回答
2

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

这可靠吗?

大多数页面是纵向的,但其中一些可以被视为横向。

请允许以横向方式查看所有页面。如果您的用户想要横向查看您的应用程序——例如,他们不想为了使用您的应用程序而将电视转过来——请让他们这样做。

有任何想法吗?

在活动中,让它通知杂志页面片段根据当时的当前( )onResume()修复其大小/位置。VideoViewConfigurationgetResources().getConfiguration()

于 2011-08-30T16:54:15.220 回答
1

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

我的解决方案是让Activityandroid:configChanges="orientation|keyboardHidden"标志。

在这样做之后,我会根据我的需要覆盖我调整大小的地方或onConfigurationChanged()里面的方法。FragmentWebViewVideoView

编辑:

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

于 2011-08-31T11:47:06.120 回答