2016-01-04 5 views
3

Я довольно новичок в разработке Android, и при работе над проектом моей компании я столкнулся с проблемой. Мне нужен Edittext с фиксированным суффиксом как часть Edittext, поэтому при вводе пользователя суффикс будет переноситься на новую строку, как и обычный контент Edittext, но пользователь не может редактировать и выбирать эту суффиксную часть.Android Edittext с суффиксом

У меня есть поиск вокруг и не могу найти хорошее решение этой проблемы. Некоторые предлагают добавить переносимый текст с текстом вправо от edittext, но это решение не сделает перенос суффикса в новую строку при вводе людей.

Другим возможным решением является обработка изменения текста для edittext, но это приведет к к очень сложной ручке для курсора edittext (например, рукописный текст-подсказка и жест выбора пользователя ...)

Итак, мой вопрос: есть ли у кого-нибудь что-то подобное или кто-то может указать мне несколько направлений реализовать эту функцию для edittext.

ответ

3

Это грязное решение вашей проблемы.

Давайте предположим, что у вас есть EditText под названием mEditText, а String под названием суффикса и boolean addedSuffix:

boolean addedSuffix = false; 
String SUFFIX = " my suffix"; 
EditText mEditText = (EditText) findViewById(R.id.my_edit_text); 

прикрепить textWatcher к вашему EditText

mEditText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

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

       // if the only text is the suffix 
       if(s.toString().equals(SUFFIX)){ 
        mEditText.setText(""); // clear the text 
        return; 
       } 

       // If there is text append on SUFFIX as long as it is not there 
       // move cursor back before the suffix 
       if(s.length() > 0 && !s.toString().contains(SUFFIX) && !s.toString().equals(SUFFIX)){ 
        String text = s.toString().concat(SUFFIX); 
        mEditText.setText(text); 
        mEditText.setSelection(text.length() - SUFFIX.length()); 
        addedSuffix = true; // flip the addedSuffix flag to true 
       } 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if(s.length() == 0){ 
        addedSuffix = false; // reset the addedSuffix flag 
       } 
      } 
     }); 

Как я сказал, что это быстро и грязное решение, поэтому это добавляет только суффикс, когда пользователь на самом деле вводит в поле EditText. Если вам нужно, чтобы он был добавлен до того, как пользователь начнет печатать, вы можете изменить логику, чтобы сделать это самостоятельно.

Удачи и счастливого кодирования!