原文链接:https://blog.csdn.net/xiangzaixiansheng/article/details/83007411
因为很多应用的自身问题,在分屏模式下会出现layout错乱的现象。所以有些应用是不支持分屏模式的。下面我们介绍三种禁止分屏模式的方法。由最简单实用,到稍微麻烦但一律秒杀的。
方法一:
我们会经常使用的,在AndroidManifest.xml文件中的application节点或者activity节点中添加如下:
android:resizeableActivity="false"
false表示不支持分屏模式,true表示支持分屏模式。
方法二:
我们可以在应用的Activity的onCreate()方法中去添加判断,以禁止分屏模式
import android.content.pm.PackageManager.NameNotFoundException;if (isInMultiWindowMode()){Context ctx = null;try {ctx = this.createPackageContext("com.android.systemui",Context.CONTEXT_INCLUDE_CODE| Context.CONTEXT_IGNORE_SECURITY);int stringId = ctx.getResources().getIdentifier("dock_non_resizeble_failed_to_dock_text", "string", ctx.getPackageName());String toast = ctx.getResources().getString(stringId); Toast.makeText(this, toast, Toast.LENGTH_SHORT).show(); } catch (NameNotFoundException ex) {Log.e(TAG, "[onCreate] NameNotFoundException ", ex); }finish();}
思路就是调用activity的isInMultiWindowMode()方法去判断是否处在分屏模式下。
方法三:
终极办法,适用于第三方没有源码的apk,我们需要在systemui中去修改。
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java///导包
import android.widget.Toast;
import android.app.ActivityManager.RunningTaskInfo;///添加如下两个方法public String getTopActivityPackageName(){String topActivityPackageName = null;try{ActivityManager manager = (ActivityManager)getContext().getSystemService(Context.ACTIVITY_SERVICE);List<RunningTaskInfo> list = manager.getRunningTasks(1);if(list != null &&!list.isEmpty() &&list.size()!=0&&list.get(0)!=null&&list.get(0).topActivity!=null){topActivityPackageName =(list.get(0).topActivity).getPackageName();Log.i(TAG, "getTopActivityPackageName = "+ topActivityPackageName);}}catch(Exception e){Log.i(TAG,e.toString());}return topActivityPackageName;}private boolean onLongPressRecents() {if (mRecents == null || !ActivityManager.supportsMultiWindow(getContext())|| !mDivider.getView().getSnapAlgorithm().isSplitScreenFeasible()|| Recents.getConfiguration().isLowRamDevice) {return false;}///新增判断if ("第三方应用的包名".equals(getTopActivityPackageName())) {Toast.makeText(getContext(), R.string.dock_non_resizeble_failed_to_dock_text,Toast.LENGTH_SHORT).show();return false;}///}@return mStatusBar.toggleSplitScreenMode(MetricsEvent.ACTION_WINDOW_DOCK_LONGPRESS,MetricsEvent.ACTION_WINDOW_UNDOCK_LONGPRESS);}