目标:通过点击按钮实现屏幕横竖屏的切换,同时更换图片。
知识点:点击事件的运用,更改系统权限的设置以及onConfigurationChanged回调事件的学习。
案例源码分析:MainActivity.java
单击事件代码:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
// 表明无法旋转屏幕
button.setText("错误");
} else {
if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
// 表明是横屏让它竖屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
// 表明是竖屏让它横屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
}
});
以上代码调用了Activity类的getRequestedOrientatiion方法获取当前屏幕的方向以及ActivityInfo类的常量进行屏幕横竖屏的设置。
只有这样还不够,因为操作了系统设置则需要在AndroidMainfest.xml中配置权限:
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
这样就能实现点击按钮进行屏幕的切换,如果需要横竖屏切换时更改图片则需要重写onConfigrationChanged方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 如果是横屏就换横屏图片
imageView.setImageResource(R.drawable.mldn_landscape);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
// 如果是竖屏就换竖屏图片
imageView.setImageResource(R.drawable.mldn_portrait);
}
super.onConfigurationChanged(newConfig);
}
也可在AndroidManifest.xml的activity标签中添加默认的Activity屏幕方向Landscape横屏,Portrait竖屏:
android:screenOrientation="portrait"
必须注意的是onConfigurationChanged方法的触发也需要在activity标签中指明:android:configChanges="orientation"
意思是当这个Activity改变了系统的设置如 横竖屏切换等 就会触发onConfigurationChanged方法,从而更换了图片。
注意:项目清单中的android:targetSdkVersion最高只能设置为12,不然无法触发onConfigurationChanged事件
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="12" />