1.Android横竖屏系统默认情况
Android横竖屏界面显示默认会沿用上一个界面的横竖屏,即上个界面是横(竖)屏就是横(竖)屏。当正在运行软件时,USB接口突然连接或者突然弹出界面,有几率性的改变当前横竖屏情况,从而造成生命周期的变换及Ui适配等问题。
2.Android强制横竖屏的实现
1.在AndroidManifest.xml
的activity节点添加android:screenOrientation属性(landscape是横向,portrait是纵向)
android:screenOrientation="landscape"
2.在activity开始的几个生命周期如OnCreate中根据各自的业务需求添加强制设置横竖屏,可以在自己封装的BaseActivity基类里统一处理横竖屏问题,也可以在BaseActivity里实现一个接口供上层界面回调。如:
package com.syt.basebiz.base;
import android.app.ActionBar;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.sf.bulktransit.baseutils.DeviceUtil;
import com.syt.basebiz.R;
import com.syt.basebiz.adadpter.PopMoreInfoAdapter;
import com.syt.basebiz.constant.Constants;
import com.syt.commui.manager.ActivityManager;
import com.syt.commui.utils.ToastUtil;
import com.syt.commui.view.CommTopPopup;
import com.syt.commui.view.LoadingDialog;
import com.syt.mvp.MvpActivity;
import com.syt.mvp.MvpIPresenter;
import com.syt.mvp.MvpIView;
import java.util.regex.Pattern;
import butterknife.ButterKnife;
import butterknife.Unbinder;
public abstract class BaseActivity<V extends MvpIView, P extends MvpIPresenter<V>> extends MvpActivity<V, P> {
protected LayoutInflater inflater;
protected RelativeLayout titleLayout;
protected RelativeLayout contentLayout;
protected TextView titleTV;
protected ImageView backIcon;
protected TextView tvRight;
protected ImageView ivRight;
protected LinearLayout rightIconLayout;
protected LinearLayout leftIconLayout;
private LoadingDialog loadingDialog;
protected View contentView;
protected Context mContext;
private Unbinder unbind;
private ScannerReceiver scannerReceiver;
private BarcodeBroadcastReceiver barcodeScannerReceiver;
private CommTopPopup mPopupWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
ActivityManager.getInstance().addActivity(this);
super.onCreate(savedInstanceState);
setScreenLandscape();
setContentView(R.layout.base_activity_layout);
hideActionBar();
inflater = LayoutInflater.from(this);
initView();
unbind = ButterKnife.bind(this);
mContext = this;
onPrepareView();
onRequestData();
}
/**
* 设置为横屏
*/
private void setScreenLandscape() {
if (!DeviceUtil.isModelHHT5() && getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
3.Android关于横竖屏属性说明
1.在AndroidManifast中设置横竖屏有一下几种属性。
android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"sensor" | "nonsensor"]
screenOrientation 用来指定Activity的在设备上显示的方向,每个值代表如下含义:
"unspecified" 默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
"landscape" 横屏显示(宽比高要长)
"portrait" 竖屏显示(高比宽要长)
"user" 用户当前首选的方向
"behind" 和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
"sensor" 有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
"nosensor" 忽略物理感应器,这样就不会随着用户旋转设备而更改了 ( "unspecified"设置除外 )。
转载请说明出处:http://blog.csdn.net/u012438830/article/details/78466485