AutoTextComplete, MutiAutoTextComplete


AutoTextComplete, MutiAutoTextComplete 사용 예시 (EditText에 문자 입력시 자동완성 기능)


private fun initLayout() {
    val adapter = ArrayAdapter<String>(
        this,   // context
        android.R.layout.simple_dropdown_item_1line, // 안드로이드 기본 제공 layout
        countries // List<String>
    )

    val autoCompleteTextView = findViewById<AutoCompleteTextView>(R.id.autoCompleteTextView)
    val multiAutoCompleteTextView = findViewById<MultiAutoCompleteTextView>(R.id.multiAutoCompleteTextView)

    autoCompleteTextView.setAdapter(adapter)
    autoCompleteTextView.setOnItemClickListener { adapterView, view, i, l ->
        val msg = adapterView.getItemAtPosition(i).toString()
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
    }

    val items = resources.getStringArray(R.array.countries_array)
    val adapter2 = ArrayAdapter<String>(
        this,
        android.R.layout.simple_dropdown_item_1line,
        items
    )
    multiAutoCompleteTextView.setAdapter(adapter)
    multiAutoCompleteTextView.setTokenizer(MultiAutoCompleteTextView.CommaTokenizer()) // 콤마를 통해 여러개 구분 검색
}


TextWatcher


TextWatcher 예시(텍스트가 변경을 감지하고 반응하는 리스터 인터페이스)


editText.addTextChangedListener {
    val str = it.toString()
    button.isEnabled = str.isNotEmpty()
}


TextInputEditText


Material 디자인이 적용된 EditText이며 상위 레이아웃으로 TextInputLayout을 갖는다.

Material 디자인 채택시 EditText의 글자수 제한 경고, 비밀번호 보기 버튼 등의 기능을 구현할 수 있다.


<!--상위 레이아웃이 감싸져있음-->
<!--counterEnabled: 글자수 세기, counterMaxLength:최대 글자수, passwordToggleEnabled: 비밀번호 보기 토글-->
<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/textInputLayout2"
    android:layout_width="300dp"
    android:layout_height="50dp"
    android:layout_marginTop="90dp"

    app:counterEnabled="true"
    app:counterMaxLength="15"
    app:passwordToggleEnabled="true"

    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textInputLayout">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/passwordText"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:hint="비밀번호"
        android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>


editText 안의 text의 이메일 형식을 정규식으로 확인


    private fun initLayout() {
        val textInputLayout = findViewById<TextInputLayout>(R.id.textInputLayout)
        val emailText = findViewById<TextInputEditText>(R.id.emailText)

        // 이메일 형식이 올바르지 않을 경우 경고 메세지를 띄운다.
        // ^ : 시작, $: 끝, .: 아무 문자, +: 한 개 이상
        val regex = "^(.+)@(.+)$".toRegex()
        emailText.addTextChangedListener{
            if(it.toString().matches(regex)){
                textInputLayout.error = null
            }else{
                textInputLayout.error = "이메일 형식이 올바르지 않습니다."
            }
        }
    }