在开发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()方法