android开发之遇到的界面问题

文章讲述了在Android项目中,如何将原有的针对单屏幕的多屏显示代码修改以适应新需求,即在一个物理屏幕上同时显示多个虚拟屏幕。重点介绍了如何使用Service、DisplayManager、DisplayContext和WindowManager来控制虚拟屏幕的层级显示。
摘要由CSDN通过智能技术生成

1.1 多屏显示界面的问题

1.1.1 问题背景:

之前的项目有两个屏幕a和b,多屏显示的代码原本是适用于屏幕a的,用于在特殊情况下覆盖屏幕a的界面,但是新项目,将原来屏幕a和屏幕b显示的内容集成显示在一个物理屏幕a上面了,也就是说将多个虚拟屏显示在一个物理屏上面了,此时屏幕b的层级比多屏显示覆盖的内容高,导致多屏显示的内容不能显示在最上层。

1.1.2 需求:

将多屏显示覆盖的内容显示在最上层,也就是虚拟屏幕b之上

1.1.3 解决方法

一般的多屏显示是通过activity显示的。因为项目需求,需要使用service来创建一个第二屏幕显示,在这里记录一下。
和activity不同的是要 Context secondDisplayContext = createDisplayContext(secondDisplay);
创建一个displaycontex,然后才能设置屏幕id。
代码如下:

DisplayManager mDisplayManager = (DisplayManager) this.getSystemService(Context.DISPLAY_SERVICE);//屏幕管理类
Display[] displays = mDisplayManager.getDisplays(); //得到显示器数组;//屏幕数组
Display secondDisplay = displays[1]; //获取要显示到的目标屏幕的display数据,参数是0还是1,看自己需求
Context secondDisplayContext = createDisplayContext(secondDisplay); //获取第二屏幕的context信息,后面就通过这个context来创建相关WindowManager或者view对象
mWindowManager = (WindowManager) secondDisplayContext.getSystemService(WINDOW_SERVICE); //使用第二屏幕的context信息,创建对应的WindowManager
mRootView = LayoutInflater.from(displaycontext).inflate(R.layout.test, null, false);//使用displaycontext创建View
mWindowManager.addView(mRootView, params); //将view添加到windowmanager上面

实现原理其实很简单,要对 Window 进行添加和删除就需要通过 WindowManager 来操作。WindowManager是一个接口,是用来管理窗口的。每个WindowManager的对象都会绑定一个特定的Display对象。想要获得Display不一样的WindowManager,需要调用Context#createDisplayContext获取到一个displaycontex,再用这个displaycontex来调用Context.getSystemService(Context.WINDOW_SERVICE) 获取WindowManager。当然的,也要通过displaycontex来创建View,mRootView = LayoutInflater.from(displaycontext).inflate(R.layout.presentation_swum, null, false);
这样就可以控制第二屏幕显示在指定的层级(通过displayid指定)。

参考

Android的WindowManager
Window、WindowManager、View之间的关系
Android|理解Window和WindowManger

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值