WebView无法在方向更改时正确调整大小

时间:2013-05-07 13:01:01

标签: android webview orientation

我正在使用webview.loadUrl()将视频网址加载到webview中。播放器以html本身编码,因此我只需将网址加载到网页视图中。

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

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

如果您能找到方法或有任何建议,请回复。

7 个答案:

答案 0 :(得分:3)

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

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

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

@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();
        }
    }

答案 1 :(得分:1)

尝试:

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

    webView.setLayoutParams(new RelativeLayout.LayoutParams(
                      ViewGroup.LayoutParams.WRAP_CONTENT,
                      ViewGroup.LayoutParams.WRAP_CONTENT));
}

答案 2 :(得分:0)

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

<activity android:configChanges="orientation|screenSize">

答案 3 :(得分: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));

    }

答案 4 :(得分:0)

据我所见,H5页面中必定存在一些错误,similar resize problem

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

答案 5 :(得分:0)

在片段中,必须将FrameLayout用于WebView

@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));
}

答案 6 :(得分:0)

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

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

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

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

AndoidManifest.xml

B[n-1] = count1[n];

    for(i=n-2;i>=0;i--)
 B[i] = (B[i+1] + count1[i+1])%MOD;

    for(i=1;i<n-1;i++)
 C[i] = (count1[i+1]*B[i+1])%MOD;


    D[n-2] = C[n-2];

    for(i=n-3;i>=1;i--)
 D[i] = (D[i+1] + C[i])%MOD;


    for(i=0;i<n-2;i++) 
sum = (sum + count1[i+1]*D[i+1])%MOD;

现在Android会把屏幕事件传递给你处理,所以你需要覆盖处理屏幕事件的函数。

MainActivity.java

        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>