TextView를 상속하며 text를 입력받고 수정가능한 유저 인터페이스 뷰다. XML에서 정의할 때 반드시 입력형태(Input Type)을 정해줘야만 한다.
<EditText
android:id="@+id/editTextView"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:inputType="text"/>
입력 형태는 글자, 숫자, 비밀번호 등 원하는 다양한 형태로 입력 받을 수 있도록 지원하고 이에 맞게 키패드를 보여준다.
EditText의 여러 속성에 대해서 알아보자.
textCursorDrawable 속성을 통해서 커서 스타일을 정의할 수 있다.
background 스타일을 정의할 수 있다. 대부분 직사각형의 형태로 스타일을 정의해서 사용한다.
입력 최대 글자를 정의할 수 있다.
수정 가능 여부를 정의할 수 있다. default 는 true 이다.
뷰 영역에서 글자 위치를 정의할 수 있다.
android:gravity="start|top"
start, top, center 등 다양한 설정이 가능하며 or 연산자(|)를 통해서 중복으로 정의가 가능하다.
힌트 글자를 정의할 수 있다. 입력 가이드를 안내하는 용도로 사용된다. text 관련 스타일이 같이 적용되며 textColorHint로 색을 별도로 지정할 수 있다.
inputType을 textMultiLine으로 정의하면 여러 줄을 입력받을 수 있다.
android:inputType="textMultiLine"
여러 줄 입력이 가능한 EditText이다. 줄이 늘어남에 따라 스크롤도 가능하다.
android:scrollbarStyle="insideOverlay"
android:scrollbarThumbVertical="@drawable/scrollbar"
android:scrollbars="vertical"
Text는 특정 데이터를 바인딩해서 사용이 가능한데, EditText는 유저 인터페이스로 외부에서도 데이터 변경이 일어나기 때문에 양방향 데이터 바인딩이 가능하다.
즉, 내부 데이터와 유저의 입력 데이터가 동기화 된다는 것이다!!
// 일반적인 데이터 바인딩
android:text="@{viewModel.text}"
// 양방향 데이터 바인딩
android:text="@={viewModel.text}"
❗️ 결합되어 있는 데이터는 null 값이 아님을 보장해야한다. 즉, 초기값이 존재해야하고, 별도의 초기값이 없을 때는 EMPTY("")로 초기화를 해줘야 한다.
AndroidManifest.XML 에서 해당 액티비티에 windowSoftInputMode 속성을 통해 EditText에 포커스 되고 키보드가 올라올 때 화면이 딸려 올라가는 것을 막을 수 있다.
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustPan"
android:configChanges="keyboardHidden|orientation|screenSize">
</activity>
configChanges 속성을 통해서 화면 변경이 일어날 때 동작 방식을 정의할 수 있고 keyboardHidden 값을 통해서 키보드 가용성이 변경되었을 때 앱이 다시 시작하지 못하도록 할 수 있다.