默认情况下,Android APP的界面会随着手机方向的改变而改变,当手机处于竖屏状态,APP的界面也处于竖屏状态,而当手机处于横屏状态,APP也会自动切换到横屏状态。一般情况下APP的界面都是为竖屏设计的,一旦自动切换到横屏,界面可能就无法直视了。而且每次屏幕方向切换,当前的页面都会销毁并重新创建。
下面先做一个简单的演示
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tvMsg" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
后台Activity文件:
package chengyujia.androidtest; import android.app.Activity; import android.content.res.Configuration; import android.os.Bundle; import android.widget.TextView; public class OrientationActivity extends Activity { private TextView tvMsg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_orientation); tvMsg = (TextView) findViewById(R.id.tvMsg); // 默认情况下每次横竖屏切换,当前的Activity都会销毁,然后重新创建,并调用onCreate方法。 showOrientation(); } private void showOrientation() { if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { tvMsg.setText("当前是横屏"); } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { tvMsg.setText("当前是竖屏"); } } }
下面是运行截图:
旋转屏幕到横屏时的截图:
禁用横竖屏切换,有两种方式,第一种是在配置文件中配置,第二种是在Java代码中设置。
第一种是在AndroidManifest.xml中,为activity节点配置android:screenOrientation属性,指定该activity为竖屏或横屏,我们将上面的这个activity的配置为竖屏,如下:
<activity android:name="chengyujia.androidtest.OrientationActivity" android:screenOrientation="portrait" />
再运行测试,此时无论手机屏幕方向如何,该activity始终是竖屏的。如果android:screenOrientation="landscape" 则始终是横屏。
下面来看第二种,
只要在onCreate方法中加一句
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
即可始终保持竖屏,如果要横屏,代码是
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
如上,对于单个Activity禁用横竖屏切换是很简单的,但是实际项目中会有很多的Activity,如果每个都设置一下就太麻烦了。有没有一处设置全局有效的方法呢?答案是有的,只要对第二种方式稍微改造一下即可。我们可以写一个如下的BaseActivity类:
package chengyujia.androidtest; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } }
让其它的Activity都继承这个BaseActivity类就能实现全局禁用横竖屏切换了。实际开发中常用这种方法,不仅仅是用来设置横竖屏,还有其它的公共功能也可以写在BaseActivity中。继承是个好东西啊,哈哈。