2013-03-27 4 views
-2

저는 안드로이드의 TextWatcher에서 타이핑 된 문자를 "a"charcter로 바꾸고 싶지만 변수 안에 실제 입력 된 문자도 저장하고 싶습니다. 이 작업을 수행하기 위해, afterTextChanged에 난 문자 대체 할이 코드 쓰기 :안드로이드의 TextWatcher에서 타이핑 된 문자를 대체하십시오.

if(s.toString().charAt(s.length()-1) != 'a'){        
txtfreak.setText(s.toString().substring(0, s.length()-1) + "a"); 
txtfreak.setSelection(txtfreak.getText().length()); 
} 

을하고 난 교체하기 전에, beforeTextChanged에이 코드 쓰기, 실제 입력 한 문자를 저장하고,이 작업을 수행하는 것을 원하는 :

freaktext=s.toString(); 

하지만 id는 작동하지 않으며 freaktext에는 afterTextChanged에서 변경 한 내용이 포함되어 있습니다! 내 질문은 afterTextChanged afterTextChanged 전에 beforeTextChanged 실행되는 것입니다? 내 코드에서는 그렇지 않다!

답변

1

TextWatcher을 사용하여 사용자가 원하는대로 달성 할 수있는 다른 방법이 있습니다. 아래의 방법을 사용하면 모든 문자 대신 'a'를 표시하고 EditText 필드의 원본 텍스트에 액세스 할 수 있습니다.

나는 TextWatcher 대신에 효과가 있기를 바랍니다.

경고 :이 방법은 아래의 서버 당신의 목적으로하지 않습니다, 그것은 당신이 시작으로 TextWatcher로 확실히 가능하지만, 당신이 당신의 버그를 수정 후에도 경우 훨씬 더 이동해야합니다. Span의 시작이나 중간 또는 클립 보드의 붙여 넣기를 포함하여 가능한 모든 방법으로 텍스트를 편집하는 사용자를 수동으로 처리해야합니다.


당신은 ("."를 점하는 모든 텍스트를 변경 ) android:inputType="textPassword"의 조합이 필요하고 (AN 'A'에 기본 점을 변경 ) PasswordTransformationMethod를 구현합니다.

당신은 설정이처럼 freaktext 변수 : In android how to show asterisk (*) in place of dots in EditText having inputtype as textPassword?

1
if(s.toString().charAt(s.length()-1) != 'a'){ 
freaktext=txtfreak.getText().toString();        
txtfreak.setText(s.toString().substring(0, s.length()-1) + "a"); 
txtfreak.setSelection(txtfreak.getText().length()); 
} 
: 당신은 완벽한 예를 들어 @Eric이 링크의 명성을 방문해야합니다
freaktext.setTransformationMethod(new MyPasswordTransformationMethod());