Android中页面旋转不销毁Webview(不重建Activity)

Activity不重建

在Android中,如果希望WebView页面在设备旋转时不销毁并重新加载,可以通过以下步骤实现:

在AndroidManifest.xml文件中,对应的Activity中添加如下配置:

1
android:configChanges="orientation|screenSize"

这将告诉系统在设备旋转或屏幕尺寸改变时不重新创建Activity。

android:configChanges属性用于指定在哪些配置发生变化时,Activity不会被销毁和重新创建。

常见的配置变化包括:

  • orientation:设备的方向变化,即横向或纵向。
  • screenSize:屏幕尺寸的变化,例如平板模式和手机模式之间的切换。
  • keyboardHidden:键盘的可见性变化,例如软键盘的显示或隐藏。
  • locale:语言设置的变化,例如用户切换了系统的语言。
  • uiMode:UI 模式的变化,例如夜间模式的切换。

你可以在android:configChanges属性中使用这些值的组合,多个值之间使用竖线(|)进行分隔。

例如,如果希望Activity在设备旋转和屏幕尺寸变化时都不被销毁和重新创建,可以这样配置:

1
android:configChanges="orientation|screenSize"

这样,当设备的方向或屏幕尺寸发生变化时,Activity不会被销毁和重新创建,而是会调用onConfigurationChanged()方法进行相应的处理。

事件处理

只有上面的配置就可以了,如果想在设备旋转的时候处理一些东西可以覆盖onConfigurationChanged()方法,以处理配置更改事件。

在该方法中,你可以选择不执行任何操作,或者手动调整布局等。

以下是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import android.content.res.Configuration;
import android.os.Bundle;
import android.webkit.WebView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://example.com");
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 如果不想做任何事情,可以不在这个方法里面写任何代码
// 如果需要,可以在这里重新布局或者做其他的调整
}
}

这样,当设备旋转时,WebView页面将不会被销毁和重新加载。

Kotlin中

1
2
3
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
}