여러 예제를 참고하여 메모 앱을 만들어보고 있는데
한 줄짜리 텍스트 입력창과 여러 줄짜리 텍스트 입력창이 필요해서 기록한다.
iOS 개발 할 때
한 줄 텍스트 입력은 UITextField로,
여러 줄 텍스트 입력은 UITextArea로 했었는데 (예외도 있긴 하다)
Android에서는 일반적으로 EditText의 속성을 이리저리 바꿔서 처리하는 것 같다.
메모의 제목은 한 줄, 내용은 여러 줄로 처리하려고 한다.
레이아웃 구성은 contentText를 Multiple Line으로 할 것이기 때문에
contentText의 parent ConstraintLayout의 Bottom을 Save버튼의 top으로 지정했다.
1. inputType
EditText의 입력에 대한 속성은 inputType으로 지정할 수 있다.
하나 또는 여러 속성을 지정할 수 있고 '|'로 구분해주면 된다고 한다.
제목은 Single Line이어야 하므로 가장 plain한 text인 text로 지정한다.
내용은 Multiple Line이어야 하므로 textMultiLine으로 지정한다.
2. lines or maxLines
EditText의 높이를 제한 하지않으면 무한정으로 늘어나게 되므로
lines 또는 maxLines 속성을 이용하여 제한할 수 있다.
lines 속성은 텍스트 입력 전에도 지정된 line수만큼 영역이 확보되어
line수를 넘어가든 안넘어가든 영역이 지정된만큼 고정되어있는 형태이다.
maxLines 속성은 텍스트 입력 전에는 plain한 상태에서 입력이 되면
높이가 점점 늘어나 지정된 line수만큼의 영역을 벗어나면 scroll되는 형태이다.
lines 속성으로 지정할 경우에 텍스트가 EditText 영역의 가운데에 위치하게 되는데
gravity 속성을 이용하여 원하는 쪽으로 옮겨주면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
app:layout_constraintBottom_toTopOf="@+id/confirmButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<EditText
android:id="@+id/titleText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="제목 (Single Line)"
app:layout_constraintBottom_toTopOf="@+id/contentText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:inputType="none" />
<EditText
android:id="@+id/contentText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="내용 (Multi Line)"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/titleText"
android:inputType="text|textMultiLine"
android:scrollbars="vertical"
android:lines="20"
android:gravity="top|left"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<Button
android:id="@+id/confirmButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
|
cs |
참고.
안드로이드의 inputType 문서에 none에 대해 아래와 같이 설명이 돼있다.
There is no content type. The text is not editable.
그래서 처음에 inputType을 none으로 지정했는데
수정도 될 뿐더러 multiLine 입력도 가능했다.
stackoverflow에서 그거 버그야라고 하는 사람도 있는 걸로 봐서
EditText를 사용할 때는 inputText 속성을 명시적으로 지정해줘야 할 것 같다.
'이상 > Andrioid' 카테고리의 다른 글
[Android/Kotlin] 리스트 만들기 (with RecyclerView) (3) | 2020.09.23 |
---|---|
[Android/Kotlin] 주소에서 위/경도 가져오기 (0) | 2020.09.18 |
[Android/Kotlin] 현재 위치 구하기(with Location Manager) (0) | 2020.09.01 |
[Android/Kotlin] Google Maps API 사용하기 (0) | 2020.08.27 |
[Android/Kotlin] List copy, update item (0) | 2020.07.22 |