1.manifest中配置横竖屏模式
当我们创建一个新的工程的时候是会随着手机横着拿和竖着拿而切换横竖屏的,如果想要只竖屏或只能横屏则需要在manifest中设置。
找到对应的activity给其添加android:screenOrientation属性,其有以下几个值:
unspecified,默认值,由系统而定。
landscape,横屏显示,宽度大于高度。
portrait,竖屏显示,高度大于宽度。
user,当前用户首选的方向。
behind,和该Activity下面的一个Activity(在Activity堆栈中的下面)绑定,与其方向一致。
sensor,由物理感应器来定。
nosensor,不随着物理感应器变化。
在代码中可用Activity.setRequestedOrientation函数来设置。
2.自动识别的res资源
可以在res目录下建立layout-land和layout-port目录,系统将自动把layout-land对应横屏,layout-port对应竖屏。
若两个目录下都有一个main.xml,横屏时将会调用layout-land/main.xml,竖屏时将会调用layout-port/main.xml。
3.获得当前是横屏还是竖屏
通过this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏。
=Configuration.ORIENTATION_LANDSCAPE,则是横屏
=Configuration.ORIENTATION_PORTRAIT,则是竖屏
当我们切换横竖屏的时候系统会将重新实例化Activity,当然也就会重新响应OnCreate等函数。
而重新实例化毫无疑问原本Activity中的变量值就都没了,这往往不是我们所希望的。
如果不想切换横竖屏的时候重新实例化则需要在manifest的Activity中加一条属性:android:configChanges="orientation"。
这时候Activity不会被重新实例化,也就不会响应OnCreate方法,而且也不会调用onPause和onResume方法,而是会响应onConfigurationChanged方法,切换横竖屏需要的一些操作可以在次方法中完成。