2012-05-11 6 views
0

유효성 검사가 붉은 색으로 보이지 않을 때 제 edittext의 배경색을 변경하고 사용자가이를 수정하기 시작하면 원래 색을 반환합니다.Android EditText Drawable 배경을 복제하는 방법?

글고 그러므로 대신 좋은 둥근 사각형의 못생긴 사각형을 그립니다 때문에, 여기에 작동하지 않습니다 setBackgroundColor()를 사용하여 테두리를 둥글게하고있다.

배경을 저장하고 나중에 복원하려고했습니다. 그리고 새로운 bakground를 사용하여 빨간색으로 칠하십시오. tv.getBackground()originalBgerrorBg에 동일한 참조를 반환하기 때문에 아래 코드는 작동하지 않습니다. errorBg으로 색상 필터를 설정할 때 나는 실제로 originalBg도 변경합니다.

어떻게 그래서 내가 거기에 색상을 변경할 수 있습니다 errorBg에 배경 개체를 복제 수 있습니까?

final Drawable originalBg = tv.getBackground(); 
    final Drawable errorBg = tv.getBackground(); <-- this does not create a new Drawable, just the same reference 
    errorBg.setColorFilter(0xFFff6347, Mode.MULTIPLY); 
    tv.setBackgroundDrawable(errorBg); 
    tv.invalidate(); 
    tv.addTextChangedListener(new TextWatcher() { 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      tv.setBackgroundDrawable(originalBg); 
      tv.invalidate(); 
     } 

     public void afterTextChanged(Editable s) {} 

     public void onTextChanged(CharSequence s, int start, int before, int count) {} 

    }); 

답변

1

당신은 내가 당신의 제안을 테스트하지 않았다

tv.getBackgroundDrawable().setColorFilter(0xFFff6347, Mode.MULTIPLY); 
tv.invalidate(); 
tv.addTextChangedListener(new TextWatcher() { 

    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       tv.getBackgroundDrawable().setColorFilter(null); 
       tv.invalidate(); 
    } 
+0

그게 전부입니다. 완벽하게 작동했습니다! (tv.getBackgroundDrawable()이 존재하지 않기 때문에 tv.getBackground()를 사용했습니다.) ;-) – ilomambo

1


는 복사본을 만드는 시도 유무 :

final Drawable originalBg = tv.getBackground(); 
final BitmapDrawable errorBg = new BitmapDrawable(getResources(), (BitmapDrawable) tv.getBackground(); 
+0

감사를 setColorFilter (NULL)와 컬러 필터를 제거 할 수 있습니다, AB11의 솔루션은 완벽했다. – ilomambo

0

당신은 당신의 배경으로 사용할 모서리가 둥근 드로어 블을 정의하는 XML 파일을 만들 수 있습니다.

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#ff6347"/> 
    <corners android:radius="3dp"/> 
</shape> 

는 드로어 블 폴더에이 파일을 넣고 그것을 사용하도록 글고 치기에 setBackgroundDrawable() 방법을 사용합니다. 원하는 색상과 모서리 반경을 가지고 놀 필요가있을 수 있습니다. 귀하의 질문에 대한 답변이 정확하지는 않지만 잘하면 도움이 될 것입니다.

+0

새로운 모양을 만들고 싶지 않습니다. 이미 모양이 있습니다. – ilomambo