Android中的onConfigurationChanged的使用

一.什么时候调用:

设备配置发生变化的时候调用,比如:内外屏切换、屏幕方向(orientation)、键盘状态(keyboard)、语言环境(locale)、屏幕布局(screenlayout)等。

二.哪些类可以重写onConfigurationChanged方法:

Activity、View(ViewGroup)、Fragment、Service、Content Provider

三.案例分析:

1.Activity案例分析:

manifest不做任何配置时候,代码如下:

java 复制代码
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("20240324", "走了onCreate");
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d("20240324", "走了onConfigurationChanged");
    }
}

这个时候旋转手机屏幕,会发现只会重新走一遍activity的创建过程,不会走onConfigurationChanged这个回调。

java 复制代码
2024-03-24 14:16:26.463 27562-27562/? D/20240324: 走了onCreate

在manifest中进行如下配置:(注意这里不能只写orientation不行,不然还是会走重建逻辑)

java 复制代码
android:configChanges="orientation|screenSize"

这个时候旋转屏幕,就不会走activity的销毁重建步骤了,只会走onConfigurationChanged这个回调。

java 复制代码
2024-03-24 14:27:51.117 28393-28393/? D/20240324: 走了onConfigurationChanged

怎么设置activity锁定屏幕方向呢,方法有以下两个:

可以在manifest中进行设置:

java 复制代码
//锁定横屏
android:screenOrientation="landscape"
//锁定竖屏
 android:screenOrientation="portrait"

可以在代码中进行设置:

java 复制代码
//设置横屏锁定
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//设置竖屏锁定
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

这里再扩充一下,对于通过WindowManager的addview方法得到的悬浮窗如下设置其横竖屏方向:

java 复制代码
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);
相关推荐
xiangxiongfly9151 小时前
Android 圆形和圆角矩形总结
android·圆形·圆角·imageview
幻雨様7 小时前
UE5多人MOBA+GAS 45、制作冲刺技能
android·ue5
Jerry说前后端8 小时前
Android 数据可视化开发:从技术选型到性能优化
android·信息可视化·性能优化
Meteors.9 小时前
Android约束布局(ConstraintLayout)常用属性
android
alexhilton10 小时前
玩转Shader之学会如何变形画布
android·kotlin·android jetpack
whysqwhw14 小时前
安卓图片性能优化技巧
android
风往哪边走14 小时前
自定义底部筛选弹框
android
Yyyy48215 小时前
MyCAT基础概念
android
Android轮子哥15 小时前
尝试解决 Android 适配最后一公里
android
雨白16 小时前
OkHttp 源码解析:enqueue 非同步流程与 Dispatcher 调度
android