本文主要是介绍Android中的onConfigurationChanged的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.什么时候调用:
设备配置发生变化的时候调用,比如:内外屏切换、屏幕方向(orientation)、键盘状态(keyboard)、语言环境(locale)、屏幕布局(screenlayout)等。
二.哪些类可以重写onConfigurationChanged方法:
Activity、View(ViewGroup)、Fragment、Service、Content Provider
三.案例分析:
1.Activity案例分析:
manifest不做任何配置时候,代码如下:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d("20240324", "走了onCreate");}@Overridepublic void onConfigurationChanged(@NonNull Configuration newConfig) {super.onConfigurationChanged(newConfig);Log.d("20240324", "走了onConfigurationChanged");}
}
这个时候旋转手机屏幕,会发现只会重新走一遍activity的创建过程,不会走onConfigurationChanged这个回调。
2024-03-24 14:16:26.463 27562-27562/? D/20240324: 走了onCreate
在manifest中进行如下配置:(注意这里不能只写orientation不行,不然还是会走重建逻辑)
android:configChanges="orientation|screenSize"
这个时候旋转屏幕,就不会走activity的销毁重建步骤了,只会走onConfigurationChanged这个回调。
2024-03-24 14:27:51.117 28393-28393/? D/20240324: 走了onConfigurationChanged
怎么设置activity锁定屏幕方向呢,方法有以下两个:
可以在manifest中进行设置:
//锁定横屏
android:screenOrientation="landscape"
//锁定竖屏android:screenOrientation="portrait"
可以在代码中进行设置:
//设置横屏锁定
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//设置竖屏锁定
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
这里再扩充一下,对于通过WindowManager的addview方法得到的悬浮窗如下设置其横竖屏方向:
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams mWindowLayoutParams = new WindowManager.LayoutParams();
//设置锁定横屏
mWindowLayoutParams.screenOrientation=(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
View layout = LayoutInflater.from(this).inflate(R.layout.activity_main, null);
windowManager.addView(layout,mWindowLayoutParams);
这篇关于Android中的onConfigurationChanged的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!