• Android APP 简单高效的禁用横竖屏切换


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

  • 相关阅读:
    CDN实现原理
    openstack测试集群扩容配置
    ELK5.2.2自动化部署脚本
    Python多线程
    Python反射
    OpenStack快照分析:(三)从磁盘启动云主机离线(在线)快照分析
    OpenStack快照分析:(二)从镜像启动的云主机离在线快照分析
    OpenStack快照分析:(一)从镜像启动的云主机离线快照分析
    Python元编程
    Python源码阅读:对象
  • 原文地址:https://www.cnblogs.com/chengyujia/p/5008045.html
Copyright © 2020-2023  润新知