你的位置:首页 > 操作系统

[操作系统]Android APP 简单高效的禁用横竖屏切换


默认情况下,Android APP的界面会随着手机方向的改变而改变,当手机处于竖屏状态,APP的界面也处于竖屏状态,而当手机处于横屏状态,APP也会自动切换到横屏状态。一般情况下APP的界面都是为竖屏设计的,一旦自动切换到横屏,界面可能就无法直视了。而且每次屏幕方向切换,当前的页面都会销毁并重新创建。

下面先做一个简单的演示

布局文件:

<??><LinearLayout ="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.

<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中。继承是个好东西啊,哈哈。