悬浮窗中有editText问题

博主分享了在使用EasyFloat实现悬浮窗时遇到的EditText焦点问题,导致其他Activity和应用的EditText无法获取焦点。为了解决这个问题,博主尝试清除悬浮窗EditText的焦点,但未成功。最终,通过模拟按下返回键的方式解决了这个问题,只有当不在本应用时才执行模拟操作。代码中包括了`sendKeyCode1`函数和`isRunningProcesses`方法的实现。
摘要由CSDN通过智能技术生成

悬浮窗中有editText问题

1.最近在弄悬浮窗,然后到github上找到了EasyFloat
EasyFloat项目地址:https://github.com/princekin-f/EasyFloat
这个很好用
2.我的这个悬浮窗带有EditText 这时候就引发了焦点问题,悬浮窗里的EditText获取到了焦点,其他Activity的EditText就获取不到焦点了,点击其他应用的EditText一点反应也没有
3.这时候想把悬浮窗的EditText焦点清楚不就好了,结果还是不能解决我的问题
4.点了很多次后,我发现,当焦点在悬浮窗上时,按一下返回键,就可以点击其他应用的EditText,然后我就通过模拟点击返回键来解决这个办法
这是我的模拟代码:

/**
 * 用Runtime模拟按键操作
 *
 * @param keyCode 按键事件(KeyEvent)的按键值
 */
private fun sendKeyCode1(keyCode: Int) {
    if(isRunningProcesses(this)){

    }else{
        try {
            val keyCommand = "input keyevent " + keyCode
            // 调用Runtime模拟按键操作
            Runtime.getRuntime().exec(keyCommand);
        } catch (e:Exception ) {
            e.printStackTrace();
        }
    }
}

其中有一个判断

isRunningProcesses(this)

这个方法是用来判断,当前在首页的活动是不是本应用的
因为当你模仿点击事件时,如果是在本应用中做了这个模拟操作,就会执行返回键,而我们的需求是在本应用内不执行返回键,所以需要有这个判断,接下来是这个方法的具体代码

 fun isRunningProcesses(context:Context):Boolean {
        val am = context.getSystemService(ACTIVITY_SERVICE) as ActivityManager
        val runningAppProcesses = am.runningAppProcesses //获取运行中进程集合
        val appProcesses = runningAppProcesses[0]
        val isfor = appProcesses.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
        Log.d("测试包名","runningAppProcesses.name==>${appProcesses.processName},kkk==$isfor")
        return appProcesses.processName == packageName && isfor
    }

这就是我做悬浮窗的解决过程,终于完成悬浮窗输入了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值