2009-12-27 2 views
1

내가하고 싶은 것은 그 내용의 타당성을 반영하여 EditText의 상태 (정말로 배경)를 바꾸는 것이다. 예 : 사용자가 999를 문맥 상 올바르지 않은 999를 입력하면 EditText는 기본 주황색 테두리 대신 빨간색 테두리를 가져야하며 텍스트가 유효하면 녹색 테두리가 있어야합니다.Android :보기/드로어 블 맞춤 스타일이 가능합니까?

방법은 내가 탐구했습니다

  1. 프로그래밍 editor.setStyle (R.styles.SomeID) 같은 것을 통해 글고의 스타일을 변경. 안드로이드에서 불가능한 것 같습니다.
  2. R.attr에 사용자 지정 상태 (state_valid, state_invalid)를 추가하고이를 적색/녹색 9 패치와 연결 한 다음 이들 상태 중 하나와 함께 drawable.setState()를 호출합니다. 이것은 getState()를 통해 상태를 다시 읽을 수 있지만 테두리가 색상을 변경하지 않는다는 의미에서 효과가있었습니다.
  3. 유효성을 감지하면 백그라운드 자원을 직접 설정합니다. 이것은 올바른 시각 효과를 유발하지만 괜찮습니다. 조금 혼란스럽고 한 상태 만 허용합니다 (예 : EditText를 눌렀는지 여부를 수동으로 확인해야합니다).

제한된 UI 부동산을 감안할 때 사용자에게 텍스트의 유효성을 시각적으로 피드백하기 위해 별도의 UI 요소를 도입하는 것이 주저하므로 EditText 자체에 표시하고자합니다.

그럼 ... 실현 가능한 것입니까? 상당히 일반적인 사용 사례 인 것처럼 보이므로 누구나 내가 간단하고 우아한 방식으로 수행하려고 노력하고 있습니까?

답변

1

음, 필자는 EditText 클래스를 확장하고 맨 위에 원하는 기능을 빌드합니다 (제안하는 세 번째 방법을 사용합니다 :-)). 이렇게하면 길을 한 번만 걸어 가야하며 가장 좋은 방법을 알게되면 구현을 변경할 수 있습니다 (세 번째 방법을 사용하여 개인적으로 해결했을 수도 있음).

+0

감사합니다. 세 번째 접근 방식의 문제점은 각 상태 또는 조합을 확인하기 위해 일련의 작업을 수행해야한다는 것입니다. EditText가 눌려 졌을 때 유효하거나 유효하지 않거나 불가능한 경우 등등. 정확한 배경을 표시하기 위해 서브 클래스가 가능한 조합을 확인해야합니다. DRY를 위반하는 것은 말할 것도없고, 이것은 깔끔하고 세련되지 않은 것처럼 보입니다. – Simon

2

당신이 기술 한 기술 중 하나 (3 번만 실용적 임)로 초점 링의 색을 변경하는 대신 유효성을 나타 내기 위해 텍스트 색을 변경하는 것이 좋습니다.

또 다른 가능성은 setCompoundDrawablesWithIntrinsicBounds()을 사용하여 EditText 내용의 왼쪽 또는 오른쪽에있는 아이콘을 수정하여 유효성을 나타낼 수 있습니다. 나는이 기술을 몇 달 전에 누군가와 논의하면서 그들이 작동하는지 여부를 잊어 버렸습니다.

물론 다른 옵션은 사용자 입력 필터 또는 수신기 등을 통해 유효하지 않은 입력을 허용하지 않는 것입니다.

+1

답변 해 주셔서 감사합니다. 물론 텍스트 색상을 변경하는 것도 옵션이지만 IMO의 영향은 미약합니다. 마찬가지로 유효성을 나타내는 아이콘을 변경하면 불일치 지점에서 피드백이 발생하지 않습니다. 이는 불량 UI입니다. 마지막으로 입력을 부분적으로 완료된 전화 번호와 같은 다른 문자로 유효하게 할 수 있으므로 실제로 필터를 적용하는 것은 옵션이 아닙니다. – Simon

+1

"마찬가지로, 유효성을 나타내는 아이콘을 변경하면 잘못된 UI 인 불일치 지점에서 피드백이 발생하지 않습니다." 그건 내가 쓴 것이 아니다. 내 제안 된 솔루션 (작동하는 경우) 우수한 UI를 제공합니다. IMHO - 포커스 링 색상 변경이 유효성 변경이라는 것을 추측 할 필요없이 올바르지 않은 것으로 생각되는 EditText에서 더 시각적으로 유력한 아이콘을 사용할 수 있습니다. – CommonsWare

0

은 내가 invalidateDrawable (yourDrawable)에 대한 호출이 접근 번호 2 내가 노력하지 않은 작업이라고 생각 ..하지만 감각의 응답

관련 문제