android屏幕横纵切换解决办法

时间:2022-06-24 05:47:02

在android系统中,当进行横纵屏切换时,由于运行时配置发生了变化,android会默认将activity结束以及重新启动。为了防止activity重新启动,我们何以通过设置android:configChanges属性来达到不重启的目的。

    经过实测,发现android:configChanges="orientation",并不能达到效果。在不设置时,横、纵切换都是调用生命周期一次;而设置了该属性之后,横纵切换时还是调用生命周期各一次。而且在只设置了orientation之后,onConfigurationChanged方法也未被执行。


    在查阅了官方解决办法之后(:http://developer.android.com/guide/topics/resources/runtime-changes.html),发现里面提到了从Android 3.2 (API level 13)开始,在横纵切换时,screen size同样发生了变化,所以要加入screen size属性,所以正确的解决办法为android:configChanges="orientation|screenSize"。在查阅资料中发现,有很多解决办法中提到了keyboardHidden属性。

"keyboardHidden"属性的官方说明为键盘输入设备发生了变化,比如用户新加入了硬件键盘。

        经过实测keyboardHidden是跟软键盘弹出无关的属性,应该是用户在android设备中接入了新的硬件输入键盘。其实一般不会出现这种情况的,各位可以根据用户的实际使用场景看是否要增加这个属性。

     以下为

onConfigurationChanged方法实例,当设置android:configChanges="orientation|screenSize"时,会在发生横纵切换时执行该方法。

@Override
public void onConfigurationChanged(Configuration newConfig) {
   
super.onConfigurationChanged(newConfig);

   
// Checks the orientation of the screen
   
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
       
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
   
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
       
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
   
}
}