Android 대화 상자에 EditText를 추가하는 방법

13504 단어 안드로이드Kotlin
Android의 AlertDialog에 EditText를 추가하는 방법을 설명합니다.

우선은 가장 간단한 예를 소개합니다.

Sample.kt
val editText = AppCompatEditText(this)
AlertDialog.Builder(this)
                .setTitle("名前の変更")
                .setMessage("名前を入力してください。")
                .setView(editText)
                .setPositiveButton("OK") { dialog, _ ->
                    // OKボタンを押したときの処理
                    dialog.dismiss()
                }
                .setNegativeButton("キャンセル") { dialog, _ ->
                // キャンセルボタンを押したときの処理
                    dialog.dismiss()
                }
                .create()
                .show()

표시되는 대화 상자는 여기입니다.



이 상태에서는 입력란이 다이얼로그의 폭 가득 퍼지고 있고, OK 버튼도 처음부터 유효화되고 있는 것을 알 수 있을까 생각합니다.
또한 문자도 무한히 입력할 수 있습니다.

이 근처를 조정한 다이얼로그를 이번에는 구현해 가고 싶습니다.

구체적인 실장 내용은 다음과 같습니다.
  • EditText의 좌우에 마진을 16 dp씩 설정한다
  • 입력 된 문자가 1 문자 이상이면 OK 버튼을 활성화합니다.
  • 입력되지 않은 경우 hint 표시
  • 32자 이상 입력 할 수 없도록합니다.

    코드는 다음과 같습니다.

    Sample.kt
    // ダイアログ専用のレイアウトを読み込む
    val dialogLayout = LayoutInflater.from(this).inflate(R.layout.layout_common_edit_dialog, null)
    val editText = dialogLayout.findViewById<AppCompatEditText>(R.id.editTextDialog)
    
    // ダイアログ作成
    val dialog = AlertDialog.Builder(this)
                        .setTitle("名前の変更")
                        .setMessage("名前を入力してください。")
                        .setView(dialogLayout)
                        .setPositiveButton("OK") { dialog, _ ->
                            // OKボタンを押したときの処理
                            dialog.dismiss()
                        }
                        .setNegativeButton("キャンセル") { dialog, _ ->
                            // キャンセルボタンを押したときの処理
                            dialog.dismiss()
                        }
                        .create()
                        dialog.show()
    
    // ダイアログのボタンを取得し、デフォルトの色を「#000000」に設定
    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getColor(R.color.black))
    dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getColor(R.color.black))
    
    // AppCompatEditTextにTextChangedListenerをセット
    editText.addTextChangedListener( object : TextWatcher {
                        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
    
                        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
    
                        override fun afterTextChanged(s: Editable?) {
                            // 1~32文字の時だけOKボタンを有効化する
                            if (s.isNullOrEmpty() || s.length > 32) {
                                dialog.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = false
                                dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getColor(R.color.gray))
                            } else {
                                dialog.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = true
                                dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getColor(R.color.black))
                            }
                        }
    })
    

    layout_common_edit_dialog.xml
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <androidx.appcompat.widget.AppCompatEditText
            android:id="@+id/editTextDialog"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginEnd="16dp"
            android:hint="1~32文字で入力してください"
            android:inputType="text"
            android:maxLength="32"
            android:maxLines="1"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    아래와 같은 다이얼로그가 표시되어 문자수에 따라 OK 버튼의 유효/무효가 바뀌면 구현 완료입니다.

  • 좋은 웹페이지 즐겨찾기