Android 事件处理详解(三) —— 响应系统设置的事件[Configuration]

本文介绍了在Android开发中如何响应系统设置事件,特别是通过Configuration类获取设备配置信息,并详细阐述了如何重写onConfigurationChanged方法来监听系统设置更改。此外,还提到在AndroidManifest.xml中配置android:configChanges属性以确保onConfigurationChanged方法能被正确触发,从而实现对屏幕方向变化的响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发Android应用时,有时候需要让应用程序随系统设置进行调整,比如判断系统的屏幕方向,判断系统方法的方向导航设备等等,有时甚至要根据系统设置的更改做出相应。
这就是响应系统设置事件的必要。

1.Configuration类简介:

Configuration类专门描述手机设备上的配置信息,这些配置信息既包括用户特定的配置项,也包括系统的动态设备配置。通过调用Activity的getResources().getConfiguration()方法获得Configuration对象,然后就可以使用下面常用属性来获取系统的配置信息:
这里写图片描述

2.重写onConfigurationChanged响应系统设置更改:

该方法是一个基于回调的事件处理方法:当系统设置发生更改时,该方法会被自动触动。
这里插一个小知识,在程序中动态的更改系统设置,可以通过调用Activity的setRequestedOrientation(int)方法来修改屏幕的方法。

范例:
动态改变手机屏幕方向。
【当系统设置更改,就会回调方法onConfigurationChanged()】

public class MainActivity extends Activity  {
    private Button mButtonto;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButtonto= (Button) findViewById(R.id.button);
        mButtonto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Configuration configuration=getResources().getConfiguration();//1.获得Configuration对象
                if(configuration.orientation==Configuration.ORIENTATION_LANDSCAPE){//如果是横屏,则修改为竖屏
                    MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
                if(configuration.orientation==Configuration.ORIENTATION_PORTRAIT){//如果是竖屏,则修改为横屏
                    MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

                }
            }
        });

    }

    //重写方法,监听系统设置的更改,监控屏幕方向的更改
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        String screen = newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE ? "横向屏幕":"竖向屏幕";
        Toast.makeText(this,"屏幕方向修改后为"+screen,Toast.LENGTH_SHORT).show();
    }
}

但这样还是不能够监听到事件,还需要在menifest中配置android:configChanges属性,该属性可以支持mcc,mnc,locale,touchscreen,keyboard,keyboradHidden,navigation,orientation,screenLayout,uiMode,screenSize,smallestScreenSize,fontScale属性值,而orientation属性值可以指定该Activity可以监听屏幕方法的改变。
且版本最高只能设置成12,否则不会回调onConfigurationChanged()方法

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值