8

我实现了ClearableEdittext并且它工作得很好,除了在 4.3 上 logcat 淹没了我:

W/View(16611): requestLayout() improperly called by com.[myPackage].ui.widgets.ClearableEditText{42233dd0 VFED..CL .F....ID 0,0-708,88 #7f050127 app:id/SearchEdittext} during layout: running second layout pass
W/View(16611): requestLayout() improperly called by com.[myPackage].ui.widgets.ClearableEditText{42233dd0 VFED..CL .F....ID 0,0-708,88 #7f050127 app:id/SearchEdittext} during layout: running second layout pass
W/View(16611): requestLayout() improperly called by com.[myPackage].ui.widgets.ClearableEditText{42233dd0 VFED..CL .F...... 0,0-708,88 #7f050127 app:id/SearchEdittext} during second layout pass: posting in next frame

并且在输入edittext时没有显示任何文本。同样在这开始淹没 logcat 之后,除了软键盘之外,UI 都被冻结了。

在 internetz 上找不到任何关于此的信息。并且requestLayout()必须在 Edittext/Textview 类中调用,因为我从不调用它。你们中有人知道如何解决此问题或导致该错误的原因吗?

EDIT1好的,所以如果我注释掉该行,问题就会消失:

setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], x, getCompoundDrawables()[3]);

我尝试将此作为可运行文件发布到视图的 UI 队列,但没有显示任何文本。

EDIT2我看过一个 Android 开发人员的视频onLayout,解释说在EditText.

EDIT3我还尝试丢弃复合可绘制对象并ImageView在顶部使用另一个,EditText但在我相信在顶部绘制某些东西时它与布局传递有关Edittext......递归调用仍在发生并且它阻塞了 UI。不知道接下来要尝试什么... 4.3 sux

EDIT4我最终使用了具有水平方向的线性布局和自定义 9 个补丁可绘制组件的背景。在布局中,我有一个带有自定义 9patch Bg 的普通编辑文本,然后是带有另一个自定义 9patch Bg 的 ImageButton。

像这样的东西:

在此处输入图像描述

红线将 Edittext 与 ImageButton 隔开。它现在适用于 4.3

4

3 回答 3

1

响应有点晚,但我刚刚遇到了 ClearableEditText 组件的相关问题。

看来,由于 setClearIconVisible() 中的 Compounddrawables 的变化,触发了 onfocus 事件的永恒循环。

我将 setClearIconVisible 更改为仅在有任何实际更改时才更改可绘制对象。

   protected void setClearIconVisible(boolean visible) {
        boolean wasVisible = getCompoundDrawables()[2] != null;
        if(wasVisible == visible) return;

        setCompoundDrawables(oldDrawables[0], oldDrawables[1], x, oldDrawables[3]);
        setCompoundDrawablePadding(oldPadding);
    }

这解决了我的键盘没有重新出现的问题。onfocus-events 的永恒循环不会对任何人有任何好处。它仍然添加了另一轮布局和focusedChanged,因此可能会有更聪明的解决方案。我可以多打一轮。

我还向开发人员发送了拉取请求,https://github.com/yanchenko/droidparts/pull/31

于 2015-02-06T06:56:36.077 回答
1

尝试清除方法 onFocusChange。它对我有帮助

于 2013-09-06T16:12:20.060 回答
1

我最终为 and 使用了 2 个单独的视图edittextclear btn请参阅我编辑的问题。

于 2013-10-09T11:31:24.837 回答