需要重写Activity的onConfigurationChanged方法。 public void onConfigurationChanged(Configuration newConfig) { 2. super.onConfigurationChanged(newConfig); 3. 事件 @Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged 加入 @Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged
; } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ){ Log.i(TAG, "onConfigurationChanged: ORIENTATION_LANDSCAPE"); } else if (newConfig.orientation 在ConfigChangesActivity类中重写onConfigurationChanged方法 @Override public void onConfigurationChanged( == Configuration.ORIENTATION_LANDSCAPE){ Log.i(TAG, "onConfigurationChanged: ORIENTATION_LANDSCAPE
onPause--> onStop--> onDestroy--> onCreate--> onStart--> onRestoreInstanceState--> onResume--> onConfigurationChanged configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",执行步骤3,就只打印onConfigChanged onConfigurationChanged --> 8、执行步骤4 onConfigurationChanged--> onConfigurationChanged--> 总结: 1、不设置Activity的android:configChanges 切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次 3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged
然后重写onConfigurationChanged方法: @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); Log.v(" == onConfigurationChanged name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> </manifest> 同时在Activity的Java文件中重载onConfigurationChanged 代码如下: @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (this.getResources().getConfiguration().orientation
,可以这样配置: android:configChanges="orientation|screenSize" 这样,当设备的方向或屏幕尺寸发生变化时,Activity不会被销毁和重新创建,而是会调用onConfigurationChanged 事件处理 只有上面的配置就可以了,如果想在设备旋转的时候处理一些东西可以覆盖onConfigurationChanged()方法,以处理配置更改事件。 setJavaScriptEnabled(true); webView.loadUrl("https://example.com"); } @Override public void onConfigurationChanged (Configuration newConfig) { super.onConfigurationChanged(newConfig); // 如果不想做任何事情,可以不在这个方法里面写任何代码 Kotlin中 override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged
configChanges="screenSize|keyboard|keyboardHidden|navigation" 然后在java代码中增加 @Override public void onConfigurationChanged (@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); } 但是,发现问题依然出现
此过程会调用到activity的onConfigurationChanged方法,用来通知activity当前配置的更改。 setNewConfiguration的内容为: 这里就是关注下onConfigurationChanged方法,此方法返回需要resize的stack列表。 defaultDisplayContent.getDockedDividerController().onConfigurationChanged(); 这个方法完成屏幕方向变化,更新当前分割线的数据。 我们再去systemUi那边,看下Divider.java里面,也有onConfigurationChanged,还是复写的方法,我们需要关注这个,因为此方法是在转屏的时候,会触发。 系统方向改变,会调用SystemUIApplication.java里面的onConfigurationChanged方法,这里它会调用注册进来的所有mServices,去依次通知onConfigurationChanged
); Log.i(TAG, "FirstActivity onRestoreInstanceState"); } @Override public void onConfigurationChanged (Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.i(TAG, "FirstActivity onConfigurationChanged"); } } 主要是在生命周期方法中设置了Log打印。 orientation|keyboardHidden”时,Android 4.0以上和不设置一样,仍然是重新调用生命周期方法,而且横竖屏都是一次;Android2.X版本切屏不会重新调用各个生命周期,只会执行onConfigurationChanged AndroidManifest.xml中设置Activity 的android:configChanges="orientation|keyboardHidden|screenSize"时,才不重新创建Activity,但会调用onConfigurationChanged
反之,如果我们配置了相应的 configuration,当新的 configuration 发生变化的时候,会回调 Activity 的 onConfigurationChanged() 方法。 android:configChanges 常用配置 在Android 3.2以后,如果我们进行下列的配置 ,这样的话横竖屏不会重新创建Activity,但是会调用 onConfigurationChanged ()方法会调用一次 横屏 》 竖屏 onConfigurationChanged()方法也会调用一次 因此我们通常可以进行相应的处理 public void onConfigurationChanged 如果我们打开系统的自动旋转屏幕,旋转屏幕,系统不会发生变化,也不会调用 Activity 的 onConfigurationChanged 方法。 当我们手动调用 setRequestedOrientation() 方法去改变屏幕的方向的时候,还是会调用 onConfigurationChanged 方法的 ---- 扩展 设置全屏模式 // 去掉
相反,Activity 会保持运行状态,并且系统会调用其 onConfigurationChanged() 方法。 但是当我们添加了该配置,如果该配置发生变更,则不会重启Activity,会调用onConfigurationChanged()方法。 screenLayout 前面我们知道存在配置时会执行onConfigurationChanged(),这个函数的参数是Configuration类型的,这个类里保存着Activity的配置,我们来看看对 小新平板 那么为什么小新平板上会有不同的现象,在android:configChanges中添加screenLayout完后我在onConfigurationChanged函数中debug获取screenLayout
当然了, 还要重写onConfigurationChanged, 见后面横竖屏切换. <?xml version="1.0" encoding="utf-8"? 我们在Toolbar里面添加切换横竖屏按钮, 然后重写onConfigurationChanged. @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged
例如手机从12键盘切换到全键盘 6. touchscreen或navigation: 键盘或导航方式变化, 如果缺少了keyboardHidden选项,不能防止Activity的销毁,并且在之后提到的onConfigurationChanged android:onConfigurationChanged实际对应的是Activity里的onConfigurationChanged()方法。 在AndroidManifest.xml中添加上述代码的含义是表示在改变屏幕方向、弹出软件盘和隐藏软键盘时,不再去执行onCreate()方法,而是直接执行onConfigurationChanged(
如果程序需要监听系统设置的更改,则可以考虑重写Activity的onConfigurationChanged (Configuration newConfig)方法,该方法是一个基于回调的事件处理方法: cfg.densityDpi + "\n"); // 配置信息输出 configurationTv.setText(status.toString()); } // 重写onConfigurationChanged 方法,用于监听系统设置的更改 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // 获取更改后的屏幕方向 int screen = newConfig.orientation activity> </application> </manifest> 上面的配置代码指定了该Activity可以监听屏幕方向改变的事件,这样当程序改变手机屏幕方向时,Activity的onConfigurationChanged
androidmanifest.xml文件中重新定义方向(给每个activity加上android:configChanges=”keyboardHidden|orientation”属性),并根据Activity的重写onConfigurationChanged (Configuration newConfig)方法来控制,这样在转屏时就不会重启activity了,而是会去调用onConfigurationChanged(Configuration newConfig
以上时要加 screenSize 属性,不然没有效果) ,该配置表明当 Android 设备屏幕方向、物理键盘(滑盖键盘)、屏幕大小状态改变时不用系统去处理,而是转由当前 activity 对象调用 onConfigurationChanged (Configuration newConfig) 方法自己处理 同时在当前 activity 对象对应的 Java 代码中加入处理方法: public void onConfigurationChanged (Configuration newConfig) { Log.v(TAG, "Configuration Change"); super.onConfigurationChanged
1)页面不重启,动态调整布局: 这种方式适用于需要调整的显示内容较少的场景,通过在onConfigurationChanged方法中通过代码动态调整UI来适配;重新初始化View,将View和数据重新绑定 这种情况建议开发者重写onConfigurationChanged() 方法,动态调整页面布局,自适应屏幕变化。 问题3:折叠展开或者分屏后显示异常 当应用设置了页面不重启,但是在onConfigurationChanged方法中没有动态调整布局时,会导致折叠展开或者分屏后显示异常,这时应用的窗口宽度发生变化。 这主要是由于应用的一些控件的宽度是和应用窗口宽度动态计算出来的,可以通过onConfigurationChanged将这部分逻辑代码重新执行一遍来解决问题。
super.onTrimMemory(level); RePlugin.App.onTrimMemory(level); } @Override public void onConfigurationChanged (Configuration newConfig) { super.onConfigurationChanged(newConfig); RePlugin.App.onConfigurationChanged
相反,Activity 会调用 onConfigurationChanged()方法,并且向此方法传递 Configuration 对象,这个对象代表当前所有配置,你可以根据不同配置进行不同的处理: @ Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } } 如果在配置改变时仍使用旧的状态,则可以不实现 onConfigurationChanged
public void onLowMemory() { } @Override public void onConfigurationChanged OnTrimMemory()中的TRIM_MEMORY_COMPLETE级别 若想兼容Android 4.0前,请使用OnLowMemory();否则直接使用OnTrimMemory()即可 3.5 onConfigurationChanged registerComponentCallbacks(new ComponentCallbacks2() { @Override public void onConfigurationChanged android:configChanges="keyboardHidden|orientation|screenSize" // 设置该配置属性会使 Activity在配置改变时不重启,只执行onConfigurationChanged
Android 真机中是不会回调该方法的; -- 注意 : Application 的 onTerminate() 方法体是空的, 这里不许要执行父类的方法 super.onTerminate(); (4) onConfigurationChanged () onConfigurationChanged() 方法简介 : -- 调用时机 : 配置改变时回调这个方法; (5) Application 代码分析 Application 相关代码 : for (int i=0; i<callbacks.length; i++) { ((ComponentCallbacks)callbacks[i]).onConfigurationChanged (Configuration newConfig); void onLowMemory(); } (1) onConfigurationChanged() 方法介绍 方法介绍 : 该方法回调后需要重新加载新配置对应的资源 , 如果 Activity 对应配置改变需要 重启组件, 其它组件不用重启; -- 方法全称 : void onConfigurationChanged(Configuration newConfig)