안드로이드에서 EditText는 거의 필수적인 존재라고 봐도 무방할 것 같다. 자주 사용하지만, 매번 필요한 기능을 검색해보기 때문에 유용한 기능들을 정리하려고 포스팅하게 되었다.

기능

  • maxLength : EditText에 작성할 수 있는 최대 길이를 지정한다.
  • singleLine : 이 기능은 true/false로 설정할 수 있으며, false로 설정하게 되면 EditText의 오른쪽 면에 닿으면 줄바꿈이 된다.
  • scrollHorizontally : 이 기능도 마찬가지로 true/false로 설정할 수 있으며, false로 설정하게 되면 EditText의 길이가 오른쪽으로 길어져도 좌우 스크롤이 안된다. 필자는 singleLinescrollHorizontally 속성을 함께 사용하였다.
  • inputType : 키보드의 형태를 지정할 수 있다. 숫자만으로 구성된 키보드를 띄울 수도 있고, e-mail 입력을 할 수 있도록 그에 맞는 키보드를 띄울 수 있다. 공식 문서를 참고하면 잘 정리되어있다.
  • imeOptions : 키보드의 완료 버튼을 지정할 수 있다. 아무 값도 지정하지 않았다면 줄바꿈이 되어 있을 것이다. 필자는 완료를 위해서 actionDone으로 지정했다.
  • style : EditText의 커서 색상이나 백그라운드 등을 바꾸고 싶다면 style을 작성해서 EditText에 지정해주면 된다.

추가적으로 생각이 나는 부분은 이 포스팅에 계속해서 올릴 예정이다.

[2020.02.19 내용 추가]

이번에 추가하는 부분은 함수라기 보다는 개발하면서 알게 된 방법 중 하나이다.
정말 간단하고, 읽는데 1분도 안걸린다.

어떤 글에 대해 수정 버튼을 누르기 전에는 글을 수정할 수 없다. 하지만, 어떤 액션을 했을 경우, 글을 수정할 수 있도록 하기 위해서 EditText의 enabled 속성을 이용했다. 또한, drawable에 파일을 생성해 selector 같이 만들었다.

  1. drawable에 파일을 만든다
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/holo_orange_dark" android:state_enabled="false" />
<item android:color="@android:color/black" />
</selector>
  1. EditText의 textColor에 drawable 파일을 연결한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<EditText
android:id="@+id/et_title"
android:layout_width="0dp"
android:layout_height="50dp"
android:background="@android:color/white"
android:enabled="false"
android:gravity="center_vertical"
android:hint="@string/label_title"
android:paddingStart="@dimen/space_16"
android:paddingEnd="@dimen/space_8"
android:text="@{vm.memo.title}"
android:textColor="@drawable/selector_et"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />

[2020.03.30 추가]

자동 개행하기

필자는 EditText를 사용해 글을 입력 받는데, 오른쪽 면에 닿았을 때 자동 개행이 되기를 원했다. 그래서 android:scrollHorizontally="false"를 설정하고 android:inputType="text"로 설정했었다.

하지만, 자동 개행은 적용되지 않았다. 구글링을 해 본 결과 왜 되지 않는가에 대해서는 나오지 않았다. 필자가 생각하기로는 text로 설정함으로써 scrollHorizontally 속성이 제대로 적용되지 않는 것으로 판단이 되었다.

여기까지가 근거 없는 이유였다. 역시나 구글링을 더 해보니 이유를 생각할 수 있었다. EditText의 inputType 속성에 대해서 검색하고 찾아봤다. 그 중 필자가 사용했던 android:inputType="text"는 다음과 같은 의미를 갖고 있다.

  • android:inputType="text" : none과 같으나 줄바꿈이 불가능하다.
  • android:inputType="none" : 다른 특징이 없는 기본 EditText. 입력 폼 안에 줄 바꿈이 가능하다.

그렇다. text 설정으로 인해서 줄바꿈이 되지 않는다. 때문에 scrollHorizontally 설정을 바꾼다하더라도 자동 개행이 되지 않았던 것이다. 이제 속성의 정확한 의미를 알았기 때문에 inputType 값을 설정하지 않아도 되고 설정해도 된다. 필자는 다음과 같이 설정했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<EditText
android:id="@+id/et_content"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_marginStart="@dimen/space_16"
android:layout_marginTop="@dimen/space_8"
android:layout_marginEnd="@dimen/space_16"
android:background="@drawable/bg_et_content"
android:gravity="top|start"
android:hint="@string/hint_content"
android:inputType="textMultiLine"
android:maxHeight="250dp"
android:padding="@dimen/space_16"
android:scrollHorizontally="false"
android:text="@{vm.memo.content}"
android:textColor="@drawable/selector_et"
android:theme="@style/EditTextStyle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/et_title" />

[inputType 속성]

  • textMultiLine : 입력 폼에 줄 바꿈이 가능하다. 따로 설정하지 않으면 단일 줄의 텍스트로 제한된다.
  • scrollHorizontally : 자동으로 줄이 바뀌고 enter 엔터키를 누르면 다음줄로 이동한다.

또한 쎄씨’s님의 블로그에 inputType에 대해서 정리되어 있으니 가서 확인해보는 것도 좋다. 공식 문서가 사실 더 좋다!

참고