Android双屏异显(Presentation)的简单使用

Android  2022年9月14日 am8:08发布2年前 (2022)更新 城堡大人
94 0 0

前言

Android 从4.2开始支持双屏显示,支持版本为17以上。

Android 双屏原理说白了,自定义一个Presentation类,Android 的标准实现是使用 API Presentation 来实现异显的功能。

public class Presentation extends Dialog {
}

从源码看,Presentation继承Dialog,可以看做一个升级版的弹窗。

正文

SecondScreen

public class SecondScreen extends Presentation {

    public SecondScreen(Context outerContext, Display display) {
        super(outerContext, display);
        //getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        Log.d(TAG, "SecondScreen: ");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    public void dismiss() {
        super.dismiss();
    }
}

添加到副屏

# 初始化displayManager
displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
# 显示
Display[] displays = mDisplayManager.getDisplays();
  Log.d(TAG, "onResume displays.length  : " + (null != displays ? displays.length : 0));
  if (null != displays && displays.length >1) {
      //避免重复创建
      if (null == mSecondScreen) {
          mSecondScreen = new SecondScreen(MainActivity.this, displays[1]);
      }
      //避免重复显示
      if (!mSecondScreen.isShowing()) {
          mSecondScreen.show();
      }
  }

我试过,若果displays.lenght 为1时,如果

mSecondScreen = new SecondScreen(MainActivity.this, displays[0]);

会提示错误:

android.view.WindowManager$InvalidDisplayException: Unable to add window android.view.ViewRootImpl$W@62f0597 -- the specified display can not be found

也就说,当displays.length大于1(至少是2)时,才可以显示分屏。

一个屏可以显示多个Presentation ,也就是一层一层盖着,顶部显示的是最后显示的那个Presentation 。

参考文章

  1. Android双屏异显(Presentation)与后台动态配置副屏内容 - 知乎 (zhihu.com)
  2. Presentation | Android Developers (google.cn)

 历史上的今天

  1. 2024: Bing(必应)不收录网站或被K的申诉方法(0条评论)
  2. 2024: Kotlin的基本语法2(0条评论)
  3. 2023: Math.random()随机数(0条评论)
  4. 2019: 朱自清:正义(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android Studio制作.9.png简单记录

前言项目中.9.png的用处很大,比如显示的title,需要一个背景图,由于文本长度不一,就需要使用这种.9.png图片。下面简单记(摘)录(抄)Android Studio制作.9.png的步骤。PS: 本文对网上大佬的文章进行简单记录而已,只是方便自己。好记性不如烂笔头正文Andro...

丰子恺:秋

我的年岁上冠用了“三十”二字,至今已两年了。不解达观的我,从这两个字上受到了不少的暗示与影响。虽然明明觉得自己的体格与精力比二十九岁时全然没有什么差异,但“三十”这一个观念笼在头上,犹之张了一顶阳伞,使我的全身蒙了一个暗淡色的阴影,又仿佛在日历上撕过了立秋的一页以后,虽然太阳的炎威依然没有减却,寒暑...

自定义垂直Seekbar简介之progressDrawable显示优化2

前言之前《自定义垂直Seekbar简介》文章中说过,通过drawBitmap直接画图片时,如果边角存在椭圆就没法正常显示。这里就优化一下,上一个版本的问题,具体效果图如图。正文直接展示效果图(未显示Thumb)可以看出,这里两边都有圆角的。原理主要代码跟《自定义垂直Seekba...

林清玄:和时间赛跑

读小学的时候,我的外祖母去世了。外祖母生前最疼爱我。我无法排除自己的忧伤,每天在学校的操场上一圈一圈地跑着,跑得累倒在地上,扑在草坪上痛哭。那哀痛的日子持续了很久,爸爸妈妈也不知道如何安慰我。他们知道与其欺骗我说外祖母睡着了,还不如对我说实话:外祖母永远不会回来了。“什么是永远不会回来了呢?”我问...

Android的5个进程等级

 一、进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体,是一个“执行中的程序”。不只是程序的代码,还包括当前的活动。二、线程:线程是进程的一个实体,是CPU调度和...

斯蒂芬.金:戒烟公司

莫里森在机场接人。他等的航班遇上了空中管制,飞机在肯尼迪机场上空盘旋,等待降落的指令。这个时候,他看见柜台那头有一个人很面熟,他朝他走去。“吉米?是吉米·麦卡恩吗?”真的是他。比一年前亚特兰大展销会时稍稍胖了一些,否则,他肯定看上去健康得让人嫉妒。上大学的时候,他很瘦,面色暗黄,烟抽得很凶,鼻...