getActivity / Toaster

Android 吐司框架,专治 Toast 各种疑难杂症
Apache License 2.0
3.2k stars 404 forks source link

如何使用非全文的context #106

Closed manitozhang closed 1 year ago

manitozhang commented 1 year ago

问题描述 框架版本【必填】:最新版本

问题描述【必填】:由于我的是车机项目, 需要使用多屏的弹出方式控制, 如何传入不同的context,目前看到只是可以在application初始化的时候传入应用的ApplicationContext, 如何在使用中更换

复现步骤【必填】:正常使用

是否必现【必填】:否

出现问题的手机信息【必填】:车机系统

出现问题的安卓版本【必填】:Android 12,level 31

问题信息的来源渠道【必填】:项目需求

请回答 是部分机型还是所有机型都会出现【必答】:车机系统

框架最新的版本是否存在这个问题【必答】:是

是否已经查阅框架文档但还未能解决的【必答】:是

issue 是否有人曾提过类似的问题【必答】:否

是否可以通过 Demo 来复现该问题【必答】:否

使用原生的 Toast 是否也会出现该问题【必答】:否

getActivity commented 1 year ago

小伙子,我没有做过车机项目,不能理解你口中说的《多屏的弹出方式控制》是什么意思,需要你这边详细介绍一下。

manitozhang commented 1 year ago

通过 DisplayManager.getDisplay 获取当前屏幕的对象, 在根据Context.createDisplayContext(display).createWindowContext(TYPE_APPLICATION_OVERLAY, null);获取当前屏幕的window的context,正常我在使用Toast的makeText里面传入该windowContext的话可以显示到其他屏幕的

manitozhang commented 1 year ago

我这边设定了A和B的displayId, 我在C应用上通过A的displayId根据以上方法获取A的context,我直接可以在C上面控制A屏幕上弹出, 但是现在我使用Toaster.init的话只能在C里面初始化C的applicationContext

manitozhang commented 1 year ago

或者说他只可以传递Application类型的吗, 是否可以支持传递Context去实例化

getActivity commented 1 year ago

小伙子,经过慎重考虑,决定不实现这一功能,具体原因如下:

另外建议你通过别的方式来实现,我这里推荐你使用悬浮窗框架 XToast 来实现,它是基于 WindowManager 做的封装,内部提供了一个 setPreferredDisplayModeId 的方法,你可以看看这个 API 是否能满足你的要求。

manitozhang commented 1 year ago

好的, 谢谢, 没问题了