gpt4 book ai didi

android - ClearableEditText - requestLayout() 在 Android 4.3 上调用不当

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:31 25 4
gpt4 key购买 nike

我实现了 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

并且在编辑文本中输入时没有显示任何文本。此外,在这开始充斥 logcat 之后,除了软键盘外,UI 会被卡住。

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

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

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

我尝试将其作为可运行项发布到 View 的 UI 队列,但没有显示任何文本。

EDIT2 我看过this video一位 Android 开发人员解释说在 onLayout 期间发生了一些递归的事情,但再一次,我只是子类化 EditText

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

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

像这样:

enter image description here

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

最佳答案

回复有点晚,但我刚刚遇到了与 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);
}

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

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

关于android - ClearableEditText - requestLayout() 在 Android 4.3 上调用不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18383006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com