Kotlin

[Kotlin] EditText 사용하는 방법 ( 키보드 짤림, Text 꺼내기, 비우기 )

eulBlue 2023. 9. 20. 19:12

📱테스트 환경

Samsung Galaxy Android 13 • Android 10


😢 내가 겪은 문제

채팅방 형식의 레이아웃을 만들고 있어서 채팅입력 레이아웃이 필요했다. 그래서 Web 의 Input 필드를 만들고 싶었다.

EditText 가 뭔지도 몰랐던 나는 TextView 에 키보드 띄워놓고 입력할때마다 반영하려고 했다. 무식하기 그지없다.

그러다가 EditText 를 알게 되었는데, 일단 이게 뭔지 설명하자면 사용자가 텍스트를 입력하고 수정할 수 있는 텍스트 입력 필드이다.

Web 의 Input 필드와 같은 역할을 하는 것 같은데, 이걸 사용하면 쉽게 할 수 있다.

<EditText
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@color/white"
    android:gravity="center_vertical"
    android:cursorVisible="true"
    android:focusableInTouchMode="true"
    android:layout_alignParentBottom="true"
    app:layout_constraintBottom_toBottomOf="parent"
    android:text="" />

나는 이제 입력 필드를 화면 바닥에 고정시켜놓고 사용하기 위해 이렇게 디자인을 했는데 디자인은 알아서 필요에 맞게 수정하면된다.

근데 RecyclerView 를 사용하고 있는데 키보드가 올라오면 뷰가 가려지는 문제가 발생했다.

인터넷에 열심히 검색해보니 이런 해결 방법이 있었다.

android:windowSoftInputMode="adjustPan"

AndroidManifest.xml 가서 해당 activity 를 찾아서 작성해주면된다.

<activity
            android:name=".ContentsActivity"
            android:windowSoftInputMode="adjustPan"
            android:exported="false">
        </activity>

근데 adjustPan 을 사용하면 문제가 위 아래가 짤리게 되는 아주아주 큰 문제가 발생한다.

이런 문제를 해결하기 위해서는 adjustPan 보다는 adjustResize 를 사용하면된다. ( 애초에 adjustResize 가 더 좋은 방법 ! )

<activity
            android:name=".ContentsActivity"
            android:windowSoftInputMode="adjustResize"
            android:exported="false">
        </activity>

이렇게해주면 뷰도 안가리고, 위아래 짤리지도 아주 편 - 안하다.

EditText 에 있는 Text 를 꺼내는 방법은 다른 방법들과 차이가 없다.

val sendMessage = findViewById<EditText>(R.id.sendMessage)
val messageText = sendMessage.text.toString()

메시지를 보냈으면, EditText 창을 비워줘야 비로소 끝난다고 할 수 있다.

비우는 방법도 코드 한줄이면 아주 깔끔하게 처리할 수 있다.

sendMessageEditText.text.clear()