2013-08-22 2 views
8

촉구 나는 ClearableEdittext를 구현하고 로그 캣이 나를 홍수 곳은 4.3을 제외하고 완벽하게 작동합니다 :ClearableEditText - requestLayout() 잘못 안드로이드 4.3

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가 멈추고 있습니다.

인터넷에 관한 정보를 찾을 수 없습니다. 그리고 requestLayout()은 Edittext/Textview 클래스 내에서 호출해야합니다. 왜냐하면 결코 호출하지 않기 때문입니다. 누구든지이 문제를 해결하는 방법이나 버그의 원인을 알고 있습니까?

EDIT1 OK, 문제가 사라집니다 그래서 라인 주석 경우 :

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

내가보기의 UI 큐에 실행 가능한로서이 게시 시도를하지만 텍스트는 최대 표시되지 않습니다.

EDIT2 내가 뭔가 재귀가 onLayout 동안 무슨 일이 일어나고 있음을 설명하는 안드로이드 개발자의 this video 봐 왔지만, 다시 한번, 나는 단지 EditText를 서브 클래스.

내가 믿는 Edittext의 상단에 뭔가를 그릴 때 이 가 EDIT3 나는 또한 화합물 드로어 블을 폐기하고 EditText 위에 다른 ImageView를 사용하여 시도하지만 레이아웃 함께 할 수있는 뭔가가 통과 ... 재귀 호출이

여전히 발생하고 UI를 차단합니다. ... 다음 시도하는 것을 4.3 SUX

EDIT4을 몰라 난 구성 요소의 배경 가로 방향 및 사용자 정의 9 패치 드로어 블과 선형 레이아웃을 사용하여 끝났다. 레이아웃에서 나는 사용자 정의 9patch Bg로 일반 edittext를 가지고 있고 다른 사용자 정의 9patch Bg로 ImageButton을 가지고 있습니다. 이 같은

뭔가 :

enter image description here

빨간색 선은하여 ImageButton에서 EDITTEXT를 구분합니다. 이제 4.3에서 작동합니다

답변

1

조금 늦었지만 ClearableEditText 구성 요소와 관련된 문제가 있습니다.

setClearIconVisible()에서 복합체가 변경되어 onfocus 이벤트의 영원한 루프가 트리거 된 것처럼 보입니다.

실제 변경 사항이있는 경우 drawable 만 변경하도록 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의 또 다른 라운드를 추가하므로 더 똑똑한 해결책이 될 수 있습니다. 나는 여분의 1 라운드와 더불어 멋지다, tho.

나는 또한 개발자에게 풀 요청을 https://github.com/yanchenko/droidparts/pull/31으로 보냈습니다.

1

try clearFocusChange를 시도하십시오. 그것은 나를 위해 도움이

+0

이 작동하면 텍스트를 입력 한 후에 버튼 만 항상 표시됩니다. 글쎄, 버전 4.3의 onFocusChange에 if 절을 넣을 수 있다고 생각합니다. 어쩌면 시간이 지나면 안드로이드 측에서 수정 될 것입니다. – androidu

1

edittextclear btn에 대한 2 개의 별도보기를 사용하여 끝내 내 수정 된 질문보기.