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

Android  2022年9月14日 am8:08发布2年前 (2022)更新 91es.com站长
62 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、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

[摘]Android中shape的用法详解

用代码生成图片,而且图片能随意的更改,既方便又节省空间,下面就介绍用shape生成自定义图形的方法步骤:在res/drawable下新建一个xml文件;在代码中引用这个xml文件,引用方式和图片一样。定义shape图形的语法如下:<?xml version="1.0" enc...

[摘]深入浅出UML类图(二)

本文作者:刘伟 http://blog.csdn.net/lovelion类与类之间的关系(1)在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式。      1. 关联关系关联(Association)关系是类与类之间最常用的...

林语堂:有丰富的心灵才有悠闲的生活

中国人之爱悠闲,有着很多交织着的原因。中国人的性情,是经过了文学的熏陶和哲学的认可。这种爱悠闲的性情是由于酷爱人生而产生,并受了历代浪漫文学潜流的激荡,最后又由一种人生哲学—大体上可称它为道家哲学—承认它为合理近情的态度。中国人能囫囵地接受这种道家的人生观,可见他们的血液中原有着道家哲学的种子。有...

MediaMetadataRetriever解析媒体文件元数据

前言记录一下,一般获取视频、音频等媒体文件的元数据信息是使用MediaMetadataRetriever这个类。正文直接上代码。MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();//设...

JNI之类型介绍

前言之前对JNI基本的使用以及很熟悉了,但也是值得部分基础内容,这次就记录一下JNI中的基础类型,方便自己查阅。正文之前我们知道,JNI中是不认识java类型的(int好像认识,哈哈),比如我们之前的boolean在JNI是jboolean类型,之前涉及的类型不对,今天就深入了解一下其他类型...

关闭Android过度缩放动画

在Android开发者选项中关于动画的设置有三个选项:窗口动画缩放、过渡动画缩放、动画程序时长缩放。这三个“缩放”的具体含义如下:窗口动画缩放:Scaling factor for normal window animations. Setting to 0 will disable win...