WebView屏幕旋转问题

3
我有一个布局,其中有一个线性布局,重心为中心以使子项居中对齐。我想通过编程添加Webview并在其中加载YouTube视频。问题是WebView的高度和宽度为wrap_content,wrap_content。因此,在纵向模式下,WebView可以很好地工作并居中对齐,但当将方向更改为横向时,WebView变为fill_parent并水平覆盖屏幕,因此内容不会居中。
以下是图片,显示了垂直模式下的结果,这是正确的。 线性布局为绿色,WebView为蓝色 此处是布局文件 此处是活动代码 在您将设备旋转到横向模式时,这里是情况,其中蓝色的WebView将自动拉伸以填充整个屏幕宽度。我希望在横向模式下,WebView也像纵向模式一样居中放置。请帮助我理解这一点并进行任何修复?
4个回答

1

好的,也许我来晚了。但是,我所做的:

AndroidManifest.xml

android:configChanges="orientation"

这段代码与屏幕方向相关,用于指定当设备的屏幕方向发生变化时,Activity 是否应该被销毁并重新创建。

WebViewContainerActivity.java

@Override
public void onConfigurationChanged(Configuration newConfig) {
    /* WebView mainView is declared globally */
    ConstraintLayout lana = findViewById(R.id.main);
    lana.removeView(mainView);
    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int screenWidth = displaymetrics.widthPixels;
    int screenHeight = displaymetrics.heightPixels;
    lana.addView(mainView, 0,
            new ConstraintLayout.LayoutParams(
                    screenWidth,
                    screenHeight));
    super.onConfigurationChanged(newConfig);
}

它能高效地完成工作,我必须使用它,因为我不懂HTML。

1
如果您在WebView中加载视频,则WebView中的对齐是HTML任务。将您的视频包装在<div>中,并添加适当的样式(在css文件中或作为标签中的style属性):
<div style="margin:0 auto;width:500px;">
    //your video object is placed here
</div>

您也可以在VideoView中播放视频,但这种技术会更加困难。简而言之,您需要在WebView上方添加一个FrameLayout,在html文件中获取应放置VideoView的坐标,并使用带有坐标的LayoutParams应用于VideoView。如果方向改变,VideoView应该使用新的坐标进行刷新。如果您对此感兴趣,我可以分享更多细节。


0

试试这个

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:gravity="center"  >
<LinearLayout
   android:id="@+id/webViewPlaceholder"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="#00AC0F"
   >
</LinearLayout>


你需要在第二个线性布局中添加android:layout_gravity="center"。 - dcow

0
为什么在横向布局中不使用wrap_content作为宽度,然后将layout_gravity设置为"center"呢?

你想让我为横屏模式创建一个单独的布局吗?请详细说明。 - anshul
我以为这就是你已经在做的事情了,但如果不是的话,那么是的。 - dcow
另一种解决方案是将 WebView 的布局重心简单地设置为居中,因为您正在将其添加到线性布局中。 - dcow
此外,您知道可以从xml资源中填充WebView,因此您不必在代码中设置所有参数。实际上,我不知道为什么您不只是将WebView放入布局文件中,然后通过其ID在Activity中查找它。 - dcow
这只是一个样例。在实际项目中,请实现您建议的相同内容。 - anshul
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/36928/discussion-between-anshul-and-david-cowden - anshul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接