5

我正在使用 webview.loadUrl() 将视频 url 加载到 webview 中。播放器本身是在 html 中编码的,所以我只需要将 url 加载到 web 视图中。

如果我没有在清单中给出 android:configChanges="orientation" 一切正常。webview 会在方向更改时正确调整大小,并且视频会调整为正确适合屏幕,然后视频会重新启动。

因此我在清单中给出了 android:configChanges="orientation" 以便视频不会重新加载。现在,虽然视频没有重新加载并继续播放,但视频/webview 没有正确调整大小,如果设备最初是纵向的,然后更改为横向,则一半的视频会离开屏幕。如果设备最初处于横向模式,然后更改为纵向模式,则仅使用一半的屏幕。

如果您能想出办法或有任何建议,请回复。

4

7 回答 7

3

*如果 configchanges = "orientation" - 未指定 * android 系统会处理更改并重新启动布局,因此重新创建布局并从头开始加载视频。

if android:configchanges = "orientation" , - 这告诉系统这个活动将自己处理方向变化。所以,android系统不会刷新加载布局。所以视频继续播放。父布局的宽度不会改变。所以纵向模式的宽度用于横向。所以,你的 webview 看起来很小。

您需要覆盖活动中的 onconfigurationchanged () 并处理方向更改。您需要为布局指定布局参数。

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
            // for example the width of a layout  
            int width = 300;
            int height = LayoutParams.WRAP_CONTENT;
            WebView childLayout = (WebView) findViewById(R.id.webview);
            childLayout.setLayoutParams(new LayoutParams(width, height));
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
        }
    }
于 2013-05-08T05:19:36.433 回答
1

尝试:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    webView.setLayoutParams(new RelativeLayout.LayoutParams(
                      ViewGroup.LayoutParams.WRAP_CONTENT,
                      ViewGroup.LayoutParams.WRAP_CONTENT));
}
于 2015-03-18T17:11:48.780 回答
0

只需将以下行添加到清单文件中的活动中:

<activity android:configChanges="orientation|screenSize">
于 2015-02-05T19:21:23.653 回答
0

在片段中,您必须为 WebView 使用 FrameLayout

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    int width = FrameLayout.LayoutParams.MATCH_PARENT;
    int height = FrameLayout.LayoutParams.WRAP_CONTENT;
    your_webview.setLayoutParams(new FrameLayout.LayoutParams(width, height));
}
于 2019-05-02T09:45:12.253 回答
0

面临同样的问题。并以最好的方式解决它

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int height = displayMetrics.heightPixels;
        int width = displayMetrics.widthPixels;
        mWebview.setLayoutParams(new LinearLayout.LayoutParams(
                width,
                height-100));

    }
于 2017-04-05T18:46:37.637 回答
0

我的回答与上述非常相似,最接近于@Arash Sharif。这是对我有用的变体。

上下文:我的应用程序是一个网络应用程序,仅使用 HTML、CSS 和 JavaScript。我通过将其包装在 WebView 控件中,将其作为 Android 上的应用程序运行。该应用程序旨在全屏运行,我需要它在屏幕重新定向时调整大小。

我在 Android Studio 工作。我既不是 Android 也不是 Java 程序员,所以我的解释可能不是正确的术语,但我很确定它是有效的。

首先,您需要告诉 Android 您将处理屏幕事件。

AndoidManifest.xml

        android:configChanges="orientation|screenSize|screenLayout|keyboardHidden">
        <activity android:name="com.babyclix.babyclix_test.MainActivity"
            android:configChanges="orientation|screenSize|screenLayout|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

现在Android会将屏幕事件传递给您处理,因此您需要覆盖处理屏幕事件的函数。

MainActivity.java

// For screen handling on changes (eg. reorientation, resizing)
import android.content.res.Configuration;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

// your stuff

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mywebview.setLayoutParams(new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));
    }

// more stuff

于 2021-06-11T08:46:32.990 回答
0

据我所知,H5页面一定有错误,类似resize问题

只需使用其他应用程序(如 chrome 浏览器)测试您的网址。

于 2017-08-31T01:39:06.353 回答