일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- activity
- data
- scroll
- android
- DART
- Coroutines
- Dialog
- 계측
- Navigation
- 앱바
- binding
- drift
- 테스트
- LifeCycle
- tabbar
- textview
- appbar
- ScrollView
- viewmodel
- 앱
- livedata
- textfield
- CustomScrollView
- 안드로이드
- Flutter
- TEST
- intent
- Kotlin
- Compose
- Button
- Today
- Total
Study Record
[안드로이드] 키보드 내리기/올리기/Activity 시작 시 자동으로 올리기 본문
View 에는 포커스(Focus) 를 가질 수 있는데 입력 포커스가 수정 가능한 텍스트 필드(EditText)로 이동하거나 이 필드에서 나가면 Android 에서는 이에 따라 입력 방법(ex. 터치 키보드)를 표시하거나 숨긴다.
사용자가 EditText 를 클릭하면 포커스가 옮겨가고 커서가 생기면서 키보드가 올라오는 것이 예시가 될 수 있다.
키보드를 올리고 내리거나 포커스를 조절하는 것을 코드로 제어하고 싶을 때가 있다. 주의해야 할 점은 강제로 키보드를 올리더라도 입력할 수 있는 뷰(ex. EditText)가 포커스를 가지지 않으면 사용자가 키보드로 입력하더라도 뷰(ex. EditText)에 적용되지 않는다.
따라서 키보드를 올리고 싶다면 입력 가능한 뷰에 포커스를 먼저 적용하고 키보드를 올려야 한다.
😶 Activity 시작 시 자동으로 입력 방법(ex. 키보드) 표시하기
AndroidManifest.xml 파일의 android:windowSoftInputMode 속성의 stateVisible 값을 사용한다.
<application ... >
<activity
android:windowSoftInputMode="stateVisible" ... >
...
</activity>
...
</application>
😶 자연스러운 UI 표시
입력 방법(ex. 키보드) 가 화면에 표시될 때 앱의 UI 에 사용할 수 있는 공간이 줄어든다. 레이아웃의 모든 콘텐츠에 액세스 가능하도록 시스템에서 레이아웃 크기를 사용 가능한 공간에 맞게 조절하려면 android:windowSoftInputMode 속성의 adjustResize 를 사용한다. stateVisible 과 같이 사용하고 싶다면 "adjustResize|stateVisible" 으로 결합할 수 있다.
<activity
android:windowSoftInputMode="stateVisible|adjustResize" ... >
...
</activity>
😶 View 에 포커스 적용하기
view.requestFocus()
😶 키보드 올리기
키보드를 올리기 전 먼저 사용자가 입력할 View 에 포커스를 맞추고 키보드를 올린다.
fun showSoftKeyboard(view: View) {
if (view.requestFocus()) {
// 키보드 올리기
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}
}
😶 키보드 내리기
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
'안드로이드' 카테고리의 다른 글
[안드로이드] 데이터 바인딩(Data binding)과 뷰 바인딩(View binding) (0) | 2023.06.19 |
---|---|
[안드로이드] ConstraintLayout 살펴보기 (0) | 2023.06.17 |
[안드로이드] EditText 살펴보기 (0) | 2023.06.16 |
[안드로이드] style 과 theme (0) | 2023.06.15 |
[안드로이드] ScrollView 살펴보기 (+ NestedScrollView) (0) | 2023.06.15 |