Android Presentation双屏异显效果的实现

1.场景说明

日常生活中,有时候会遇到Android设备连接两个屏幕进行显示的问题,比如酒店登记信息时,一个屏幕用于员工操作,一个屏幕显示相关信息供顾客查看。这里就涉及到android的双屏异显的问题,实现android的双屏异显,Google也提供了相应的API方法Presentation。

2.Presentation介绍

要了解API的具体调用,推荐先查看官方的文档:Presentation文档
Android从4.2开始支持双屏显示,开发时需 minSdkVersion >= 17 。Android连接两个屏幕时,自动分配主屏和副屏,主屏显示正常的Activity界面,副屏通过创建Presentation类来实现。

在这里插入图片描述

通过查看Presentation继承关系可知,Presentation继承自Dialog,创建的时候需要遵循Dialog相关要求。

3.创建Presentation
public class MyPresentation extends Presentation implements View.OnClickListener {
    private Context context;
    private Display display;

    public MyPresentation(Context outerContext, Display display) {
        super(outerContext, display);
        this.context = outerContext;
        this.display = display;
    }

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

        initView();
    }

    private void initView() {
        TextView tv_back = findViewById(R.id.presentation_tv_back);
        tv_back.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.presentation_tv_back:
                dismiss();
                break;
        }
    }
}

创建Presentation后,自动生成构造函数,构造函数中

  • outerContext:上下文环境,可以是主屏Activity,ApplicationContext或者Service
  • display:副屏的Display

OnCreate方法中完成布局的初始化,可设置相应按钮的监听,关闭当前Presentation,执行dismiss()方法即可(前提:副屏支持点击)

4.获取屏幕Display信息

创建好Presentation后,需要在主屏Activity上获取屏幕的Display信息,让其显示副屏信息,Android系统提供了两个方式来获取Display信息。

4.1 MediaRouter方式
MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(
                MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
Display presentationDisplay = route != null ? route.getPresentationDisplay() : null;
//显示副屏Presentation
if (mPresentation == null && presentationDisplay != null) {
    mPresentation = new MyPresentation(context, presentationDisplay);
    try {
        mPresentation.show();
    } catch (WindowManager.InvalidDisplayException ex) {
        mPresentation = null;
    }
}
4.2 DisplayManager方式
DisplayManager mDisplayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
displays = mDisplayManager.getDisplays();
if (displays.length > 1) {
   myPresentation = new MyPresentation(this, displays[1]);
   myPresentation.show();
}

在Activity中添加上面的代码后,即可实现双屏双显的效果

5.双屏双显的优化:
5.1 副屏显示Toast提醒

通过上面的方法实现双屏双显后,如果在Presentation创建Toast提醒,会出现提醒显示在主屏上的问题,这里需要注意创建Toast的Context参数

Toast.makeText(getContext(),"副屏Toast",Toast.LENGTH_SHORT).show();
5.2 副屏内容常驻,不退出

因为Presentation相当于在主屏的Activity上创建了一个特殊Dialog,所以Presentation会随着主屏Activity的生命周期显示隐藏,如何让副屏常驻,不随主屏Activity退出。在Dialog中,我们知道可以通过创建系统级弹框的方式来做,Presentation中也是一样。

  • 添加系统权限

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    
  • 在Presentation中添加系统弹框代码

    getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    
6.Presentation限制
  • Presentation实际上是一个特殊的Dialog,因此在Presentation中无法创建Fragment、popupwindow等组件
  • Presentation显示的副屏和主屏的尺寸是不相同的,绘制UI时需特别注意

至此,Presentation相关的内容就介绍结束了,有问题,欢迎留言。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对您的问题,我可以为您提供一些关于在Android Studio中进行双屏异的信息首先,确保您的计算机系统支持双屏设置。然后,按照以下步骤操作: 1. 连接第二个示器:将第二个示器连接到计算机,并确保它被正确识别。 2. 打开Android Studio:启动Android Studio,并进入“File(文件)”菜单。 3. 进入“Settings(设置)”:在“File(文件)”菜单中,选择“Settings(设置)”。 4. 打开“Appearance & Behavior(外观与行为)”:在设置窗口的左侧面板中,选择“Appearance & Behavior(外观与行为)”选项。 5. 进入“Appearance(外观)”选项卡:在“Appearance & Behavior(外观与行为)”选项卡中,选择“Appearance(外观)”。 6. 启用“Presentation Mode(演示模式)”:在“Appearance(外观)”选项卡中,启用“Presentation Mode(演示模式)”。 7. 配置示器:在“Presentation Mode(演示模式)”下,您可以配置要在主示器和辅助示器上示的工具窗口。您可以使用拖放或右侧的箭头按钮来移动它们。 8. 应用更改:点击“OK”按钮以应用更改。 现在,您可以在Android Studio中使用双屏异了。主示器上将示主要编辑界面,而辅助示器上可以示工具窗口,如项目结构、日志等。 希望这些步骤能帮助到您!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值