Search code examples
androidandroid-edittexttextwatcherandroid-textwatcher

Make few prefilled characters uneditable in EditText using Android


I am working on EditText where I am displaying pre filled country code in start lets say "+971", what I want is that if user trying to click and edit in EditText, he should not edit or delete "+971" and can only be able to put number after that like "+971 123445579" and if trying to delete number then "+971" should not get delete.

My code is given below, please guide me how can I achieve this. Thanks

private fun setupTextChangeListener() {
        edit_text.textWatcherListener = object : TextWatcher {
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

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

            override fun afterTextChanged(s: Editable?) {
            }
        }
    }

// In this method I am putting Start Drawable in EditText:

private fun setDatePickerIconOnDemand() {
    edit_text.setDrawableStart(context.drawable(R.drawable.ic_earh_arrow_down_default))
    edit_text.setDrawable()
}

Solution

  • You can add following lines of code in on onTextChanged callback

     if (edit_text.length() < 5 || !edit_text.text!!.startsWith("+971 ")) {
         edit_text.setText("+971 ")
         edit_text.setSelection(edit_text.length())
       }
    

    What it will do is: It will check onTextChanged 'if your current text in edit text is only your country code, Set the country code in your editText and move cursor at the end.