Android在系统界面上添加窗口

这篇具有很好参考价值的文章主要介绍了Android在系统界面上添加窗口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

WindowManager.addView()是Android中的一个方法,用于在屏幕上添加一个窗口。它允许你在应用程序的上下文之外创建一个窗口,并将其显示在其他应用程序或系统界面上。

  1. 新建一个自定义View用于显示

     class MyView @JvmOverloads constructor(context: Context?,attrs: AttributeSet? = null,
                       defStyleAttr: Int = 0) :
        View(context, attrs, defStyleAttr) {
        var myImage:Bitmap?=null
        var pX = 0f
        var pY = 0f
        init {
            myImage = BitmapFactory.decodeResource(resources,R.mipmap.image)
        }
        fun setPos(x:Float,y:Float){
            this.pX = x;
            this.pY = y
            invalidate()
        }
    
        override fun onDraw(canvas: Canvas?) {
            super.onDraw(canvas)
            if (pX != 0f||pY != 0f){
                myImage?.let {
                    canvas?.drawBitmap(it,pX,pY,null)
                }
            }
        }
    }
    
  2. 使用windowManager.addView()显示

      var myView :MyView?=null
      var randomCount = 0
      private fun show() {
             myView = MyView(mConext)
             val layoutParams = WindowManager.LayoutParams(
                 WindowManager.LayoutParams.WRAP_CONTENT,
                 WindowManager.LayoutParams.WRAP_CONTENT,
                 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,// 设置窗口类型为悬浮窗口,需要悬浮窗权限
                 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,// 窗口不需要获取焦点
                 PixelFormat.TRANSLUCENT // 设置窗口背景为透明
             )
             val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
             windowManager.addView(myView , layoutParams)
             CoroutineScope(Dispatchers.IO).launch {
                 while (randomCount < 20){
                     delay(1000)
                     withContext(Dispatchers.Main){
                         myView?.let {
                             it.setPos((0 until 500).random().toFloat(), (0 until 500).random().toFloat())
                         }
                     }
                     randomCount ++
                 }
                 withContext(Dispatchers.Main){
                     windowManager.removeView(myView)
                 }
             }
         }
    

首先创建了一个WindowManager对象,在这个对象上进行操作。然后创建了一个自定义的MyView对象,作为要添加的窗口的内容。接下来,创建了WindowManager.LayoutParams对象,用于指定窗口的各种属性,比如宽度、高度、位置等。最后,通过windowManager.addView()方法将自定义的View添加到WindowManager中,从而将其显示在屏幕上。文章来源地址https://www.toymoban.com/news/detail-801904.html

到了这里,关于Android在系统界面上添加窗口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 多任务窗口中的界面高斯模糊处理问题

    应用开发过程中安全问题的确需要系统考虑也要开发者自己多考虑,一个小的细节可能会让你的应用变的更安全,最近在用招商银行App的时候无意中发现了 iPhone上多任务窗口 ,看到招商银行的应用有一个特别的地方就是当应用出现在多任务中的时候界面被高斯模糊处理了,

    2024年02月11日
    浏览(27)
  • Xamarin.Android实现界面自动添加控件

    有时需要在APP中动态的添加控件,因此记录下在Xamarin中的实现步骤。 VS2022社区版 UI的代码如何 活动中的代码如下: 工程代码 界面中添加控件,就是通过 AddView 方法实现的,方法有如下的重载版本: 参数 child 就是要添加的控件元素; LayoutParams 代表待添加元素的样式。但也

    2024年02月15日
    浏览(29)
  • android 12后WindowManager事件穿透类型悬浮窗无效问题

    笔记: 项目需要将一个悬浮窗WindowManager仅显示view给用户看,不可操作,将触摸事件穿透到后面的窗口。WindowManager.LayoutParams代码如下 在android12以下的机型中测试都没问题,触摸事件可以穿透悬浮窗。但在android 12机型测试时,触摸事件无法穿透悬浮窗了。 查了android开发者官

    2024年02月13日
    浏览(39)
  • Android使用Jetpack WindowManager来开发可折叠设备的探索

    我们在Google开发者大会上,看到Jetpack WindowManager和WindowSizeClass这些技术,如下图。 那这里不得不说折叠屏手机了 在其中一个显示区域中运行一个应用。 同时运行两个应用,各位于一个显示区域中(在 multi-window 模式下)。 可折叠设备还支持不同的折叠状态。折叠状态可用来

    2024年02月08日
    浏览(32)
  • WindowManager Flag对View触摸事件的影响

    FLAG_NOT_FOCUSABLE:使当前View不会获得焦点,此View会将焦点传递到下层可获取焦点的View FLAG_NOT_TOUCH_MODAL:允许当前View获取焦点,也允许View范围外的点击事件传递给下层的View FLAG_NOT_TOUCHABLE:使View无法获取焦点 FLAG_WATCH_OUTSIDE:当View范围外的点击事件发生时,View将收到MotionEven

    2024年02月03日
    浏览(30)
  • QT界面中再添加界面窗口

    目录 使用场景: 教程: 1.首先创建一个qt设计师界面类 2.现在你有界面了,但是没有创建 3.创建了界面,但是没有容纳该界面的地方,这个时候就要选择容纳的界面, 4.创建完成控件以后开始添加界面,大体的方法基本都是这个 首先说一下使用场景,很多时候一个界面会包含很多不

    2024年02月16日
    浏览(29)
  • Android 12系统源码_窗口管理(五)DisplayContent简介

    DisplayContent 用于管理屏幕,一块DisplayContent 对象实例代表一个屏幕设备,这样有多个屏幕的设备就可以创建多个DisplayContent 对象,虽然多数设备只有一个显示屏,但它们同样可以创建多个 DisplayContent 对象,如投屏的时候,可以创建一个虚拟的DisplayContent。 1、DisplayContent对象实

    2024年02月07日
    浏览(26)
  • Android 11 添加系统属性

    在初识Android 属性一文中提到,系统会默认加载以下文件 要弄清楚我们应该在哪里添加系统属性,就要知道这些文件是怎么生成的。以/system/build.prop文件为例,来分析下其生成过程 属性文件的生成逻辑集中在buildmakecoreMakefile文件中 注释1处,将ADDITIONAL_BUILD_PROPERTIES定义的属

    2024年04月08日
    浏览(62)
  • 添加系统级权限 android:sharedUserId=“android.uid.system“

    当我们在项目中添加系统级权限时,运行时会有错误提示如下: Installation did not succeed. The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 之所以报错,是添加系统级权限之后还需要在目标系统的platform密钥来重新给apk文件签名。我这里用的签名文件是从目标系统中

    2024年02月13日
    浏览(37)
  • Android 12系统源码_窗口管理(一)WindowManagerService的启动流程

    WindowManagerService是Android系统中重要的服务,它是WindowManager的管理者,WindowManagerService无论对于应用开发还是Framework开发都是重要的知识点,究其原因是因为WindowManagerService有很多职责,每个职责都会涉及重要且复杂的系统,这使得WindowManagerService就像一个十字路口的交通灯一样

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包