Добавляйте пробелы в тексте редактирования, когда пользователь печатает. Формат австралийского номера ABN - PullRequest
1 голос
/ 22 января 2020

Привет Мне нужны пробелы после 2-го, 6-го и 10-го символа в текстовом редакторе String как пользовательский тип. Например, если пользователь вводит 51824753553 в тексте редактирования, поэтому при изменении текста текст редактирования должен отображать значения как 51 824 753 553. Я искал хорошие решения для этого, но в итоге нашел это решение, которое, как мне кажется, является единственным.

 mBinding?.txtAbncode?.addTextChangedListener(object : TextWatcher {

          override fun afterTextChanged(s: Editable) {
              var inputlength = mBinding?.txtAbncode?.text.toString().length
              if (count <= inputlength && (inputlength == 2 || inputlength == 6 || inputlength == 10)){
                  mBinding?.txtAbncode?.setText(mBinding?.txtAbncode?.text.toString()+" ")
                  var pos = mBinding?.txtAbncode?.text!!.length
                  mBinding?.txtAbncode?.setSelection(pos)
              }
              else if(count >= inputlength &&(inputlength == 3 ||
                          inputlength == 7 || inputlength == 11)){
                  mBinding?.txtAbncode?.setText(mBinding?.txtAbncode?.text.toString().substring(0,mBinding?.txtAbncode?.text.toString().length-1))
                  var pos = mBinding?.txtAbncode?.text?.length
                  mBinding?.txtAbncode?.setSelection(pos!!)
              }
              count = mBinding?.txtAbncode?.text.toString().length

          }

          override fun beforeTextChanged(s: CharSequence, start: Int,
                                         count: Int, after: Int) {

          }

          override fun onTextChanged(s: CharSequence, start: Int,
                                     before: Int, count: Int) {

          }
      })

count равно 0, которое объявлено сверху. Но это решение прекрасно работает, когда я вставляю символ. но когда я удаляю символы до 2-го, 6-го и 10-го символов, а затем возобновляю ввод текста, добавление пробелов не работает.

Пожалуйста, помогите мне с некоторыми объяснениями. Я понял блок «если», который добавляет пробелы, но что «еще» делает в этом. Мой. xml файл редактируемого текста:

   <EditText
      android:id="@+id/txtAbncode"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:hint="51 824 753 553"
      android:maxLines="1"
      android:background="@null"
      android:inputType="number"
      android:maxLength="14"
      android:text="@{profileViewModel.profileModel.abnNumber}"
      android:textSize="@dimen/txt_normal"
      android:textColor="@android:color/white"
      android:textColorHint="#80FFFFFF"
      app:fontFamily="@font/sf_pro_text_bold"/>

1 Ответ

0 голосов
/ 22 января 2020

Пожалуйста, обратитесь следующим образом: -

 **YourEdittext**.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(editable: Editable?) {
                val inputLength = **YourEdittext**.text.toString().length
                if (count<=inputLength && (inputLength == 2 || inputLength == 6 || inputLength == 10)) {

**YourEdittext**.setText(YourEdittext.text.toString().plus(" "))
                val pos = **YourEdittext**.text?.length
                **YourEdittext**.setSelection(pos!!)
            }else if (count>=inputLength && (inputLength==3 || 
           inputLength==7 || inputLength==11)) {

                    YourEditext.setText(YourEditext.text!!.substring(0,YourEditext.text!!.length-1))
                    val pos = YourEditext.text?.length
                    YourEditext.setSelection(pos!!)
                }
            count=**YourEdittext**.text.toString().length

        }

        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

        }

        override fun onTextChanged(text: CharSequence?, p1: Int, p2: Int, p3: Int) {
            Log.d("TEXTVALUE","="+**YourEdittext**.text.toString().replace(" ",""))
        }
    })
...