Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于悬浮窗,希望能有更多的人进行测试一下 #1126

Closed
cabins opened this issue Nov 28, 2023 · 5 comments · Fixed by #1127 or #1143
Closed

关于悬浮窗,希望能有更多的人进行测试一下 #1126

cabins opened this issue Nov 28, 2023 · 5 comments · Fixed by #1127 or #1143

Comments

@cabins
Copy link
Contributor

cabins commented Nov 28, 2023

我在使用的时候,发现悬浮窗的位置(left, right, left_up, right_up)不对,大概表现为始终在屏幕的最左侧,y方向上大致是对的。

使用的是3.2.15版本。

于是我就好奇,对代码debug了一下。然后发现那部分的代码我其实不太能看懂。但大概位置是:

https://github.com/osfans/trime/blob/7e9b4ef65df41c74ff965b0c9b3d6d98aa0f2692/app/src/main/java/com/osfans/trime/ime/core/Trime.java#L179C7-L208

我不太明白的点在于那频繁的min和max。而且再上面一些,一开始取maxX的时候,我debug出来的值也不对(是一个负值,例如-500)。

所以,我就暴力的做了一些删除,把else分支里面的min, max全部删掉之后。再进行了测试。

在我的设备上(vivo Pad),悬浮窗口的位置是正确的了。

所以我不确定,大家是否也在悬浮窗口这里有问题,希望大家能够进行更多一些的测试。也希望开发大佬们,能够把这里的代码梳理一下,看是否有一些疑似适配的问题。

@cabins
Copy link
Contributor Author

cabins commented Nov 28, 2023

更新:

仔细研读了一下这部分的代码。分享一下心得。

① 问题的根源在于,一开始获取的maxX的值不对。不知道为啥,mCandidateRoot.getWidth()这个值总是为0,candidateLocation[0]的值也总是为0。
② 看明白了这些min,max变量的含义,min代表的是最小起始位置,如minX是屏幕最左边缘的位置;max是最大起始位置。
③ 看明白了min, max方法的意图,是为了防止超出屏幕界限,即始终保证最后获取到的x要满足 minX <= x <= maxX,y也是一样,这样悬浮窗不会超出屏幕显示。

所以我尝试将代码重新写了一下,更换了测量屏幕宽、高的方法,如下:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
final int maxX = displayMetrics.widthPixels - mPopupWindow.getWidth() - minX;
final int maxY = displayMetrics.heightPixels - mPopupWindow.getHeight() - minY;

并将过程中的min(), max()删除掉,只留了最后渲染前的纠正。大概如图:
图片

经过简单测试,这样悬浮窗的问题,应该基本解决。(但受限于手头的设备,不确定是否有兼容性问题。而且这样硬测量屏宽高的方法可能有问题,比如我就发现如果一个应用处于小窗的状态,就不太对。)

@Bambooin
Copy link
Collaborator

I think you should create the pull request and others can verify this patch by downloading the ci build.

@cabins
Copy link
Contributor Author

cabins commented Nov 30, 2023

I think you should create the pull request and others can verify this patch by downloading the ci build.

明白。但我看没有其他人报过问题,所以不确定release版本的是否在其他人那里也有问题。我在多测试一下我修改的部分,然后尝试创建一个pull request。

@goofyz
Copy link
Collaborator

goofyz commented Dec 8, 2023

[> Screenshot_2023-12-01-06-17-45-459_com miui notes-edit 显示异常如图所示。](#1127 (comment))

我的也是這樣,位置掉到下面了 。
建議 re-open 此 issue。

@cabins
Copy link
Contributor Author

cabins commented Dec 8, 2023

问题已经定位到,我周末结束后修复一下。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants