2015-10-17 5 views
2

Мне нравится каждый раз, когда пользователь вводит письмо в текст редактирования, чтобы преобразовать букву в верхний регистр. Вот мой код:Установите буквы в верхний регистр динамически андроид

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    test = (EditText) findViewById(R.id.test); 
    test.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      beforeStr = s.toString(); 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
       char current = s.charAt(before); 
       newCurrent += String.valueOf(current).toUpperCase() + beforeStr; 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      test.setText(newCurrent); 
     } 
    }); 
} 

метод SetText вызовы снова и снова все методы TextWatcher и мои преобразования никогда не заканчивается.

Может ли кто-нибудь мне помочь?

+2

попробовать это http://stackoverflow.com/a/25571410/1680426 –

ответ

2

Перед тем, как изменить его, вам необходимо проверить, не является ли ваш текст верхним. Таким образом, он не изменит его снова, если он не понадобится, и поместите вас в непрерывный цикл. Вам не нужно ничего вводить внутри beforeTextChanged и afterTextChanged.

Пример:

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    String upper = s.toString().toUpperCase(); 
    if (!s.equals(upper)) { 
     test.setText(upper); 
    } 
} 

Или вы могли бы просто добавить эту строку в EditText XML.

android:textAllCaps="true" 
+1

Вы никогда не хотите использовать '==' или '! = 'для равенства строк. Это сравнивает объекты, а не значения. Вместо этого вы всегда хотите использовать 'String # equals' для равенства строк. В приведенном выше коде 'if (s! = Upper) {' всегда будет истинным, поскольку объект 'CharSequence' никогда не будет равен объекту' String', даже если они содержат одни и те же точные символы. – JBirdVegas

1

Вероятно, проще всего использовать Android предусмотрен фильтр

myEditText.setFilters(new InputFilter[] {new InputFilter.AllCaps()});