[Kotlin] 10 - Widget And Listener

2024. 6. 24. 16:53· 공부/Kotlin
목차
  1. Widget And Listener
반응형

Widget And Listener

실습 준비

  • EmptyActivity 를 가진 새 프로젝트 생성

build.gradle.kts (Module:app)

MainActivity.kt

EditText

  • 사용자로 부터 문자열을 입력 받을 수 있는 위젯
  • 주요 설정 항목
    • android:inputType-> 입력 항목의 출력 및 가상 키보드 종류를 결정
    • android:ems->layout_width가 wrap_content일때 일정 영역을 확보하는 속성. 현재 시스템 폰트 기준으로 대문자 M의 너비를 ems 에 설정된 숫자만큼 확보

EditText - android.text.TextWatcher

  • EditText의 입력이 바뀔 때 마다 그 사실을 알려주는 Listener
  • 다음 세 가지 함수를 가진다.
  • beforeTextChanged(s:CharSequence, start:Int, count:Int, after:Int)
    • s:수정전 문자열, start부터 count개의 글자가 after길이 문자열로 변경된다.
  • onTextChanged(s:CharSequence, start:Int, before:Int, count:Int)
    • s:수정 문자열, start에서 count개의 글자가 before길이의 문자열을 대체한 결과.
  • afterTextChanged(s:Editable)
    • s: 수정 완료

TextWatcher 사용법

  • Activity가 직접 구현하는 경우 : old version
class MainActivity : AppCompatActivity(), TextWatcher{ 
     private val binding:ActivityMainBinding by lazy{ 
         ActivityMainBinding.inflate(layoutInflater) 
 } 
     override fun onCreate(savedInstanceState: Bundle?) { 
         super.onCreate(savedInstanceState) 
         setContentView(binding.root) 
         binding.editTextTextPersonName.addTextChangedListener(this) 
 } 
     override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { 
         Log.d("TextWatcher", "beforeTextChanged ($s, $start, $count, $after)") 
 } 
     override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { 
         Log.d("TextWatcher", "onTextChanged ($s, $start, $before, $count)") 
 } 
     override fun afterTextChanged(s: Editable?) { 
         Log.d("TextWatcher", "afterTextChanged (${s.toString()})") 
 } 
}
  • 각 함수를 파라미터로 넘기는 경우 : new version
    • beforeTextChanged와 onTextChanged는 default parameter 가 있으므로afterTextChanged 만 람다식으로 넘길 수 있다.
class MainActivity : AppCompatActivity() { 
     private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

     override fun onCreate(savedInstanceState: Bundle?) { 
         super.onCreate(savedInstanceState) 
         setContentView(binding.root) 
         binding.editTextName.addTextChangedListener { 
             Log.d("TextWatcher", "afterTextChanged (${s.toString()})")
         } 
     }
}

CompoundButton

  • 상속

CompoundButton.OnCheckedChangeListener

  • GUI의 업데이터는 자동으로 이루어진다.
  • 기본적으로 onClick과 유사하고 추가정보로 isChecked를 통해 현재 Check 되었는지 해제 되었는지를 알려준다.
binding.checkBox2.setOnCheckedChangeListener { button, isChecked ->
            Log.d("main", "Checkbox is checked: " + isChecked)
}

만약 setOnClickListener로 구현을 하면 체크되었는지를 직접 작성해줘야한다.

binding.checkBox2.setOnClickListener {
    val btn = it as CompoundButton
    if(btn.isChecked) {

    } else {

    }
}   

RadioButton

  • 다른 CompoundButton은 각자 동작
  • RadioGroup의 자식으로 RadioButton들을 넣어야 함.
    • 같은 그룹 내에서 다른 RadioButton이 선택되면 이전 선택이 해제됨.
  • RadioGroup 없이 사용할 경우 한 번 클릭하면 선택을 해제할 수 없음.
  • RadioGroup은 android:orientation을 이용해 라디오 버튼의 방향을 지정 가능
  • 클릭으로 선택을 해제 하는 방법이 없으므로 View.OnClickListener를 사용 가능

ImageView

  • Bitmap 객체 또는 res/drawable 폴더에 있는 비트맵 형식의 그림(jpg, png) 또는 벡터 형식의 그림(svg를 변환한 xml)을 화면에 출력한다.
    • android:src
  • ImageView의 사이즈와 원본 이미지의 사이즈가 다를 수 있으므로 android:scaleType 속성으로 지정한다.
    • 예) 원본이 매우 큰 경우

SVG 파일을 프로젝트에 추가하는 방법

  • 안드로이드는 벡터 형식의 이미지를 지원함.
    • 해상도와 상관 없이 깨지지 않고 용량이 적은 것이 장점
  • 그러나 svg 파일을 바로 쓸 수는 없고 import 과정을 통해 변환해서 사용함.
  • res/drawable 폴더에서 우클릭 > New > VectorAsset

벡터 이미지 파일을 프로젝트에 추가하는 방법

  • Clip Art: 구글에서 제공하는 벡터 이미지
  • Local File: 별도로 다운받아둔 svg나 png 파일을 선택

PNG 이미지 파일을 프로젝트에 추가하는 방법

  • res - drawable 안에 png 파일을 넣는다.
  • layout에서 Common - ImageView를 추가한다.

Progressbar

  • 진행을 나타내는 위젯으로 원형과 바(bar) 타입이 있다.
  • 원형은 애니메이션을 가지고 있지만 멈출 수는 없다.
    • android:visibility="visible" 의 속성으로 숨길 수 있다.
  • 바 타입은 진행 정도를 원하는대로 적용할 수 있다.
    • android:max(default 100), android:progress
    • Progressbar: getProgress(), setProgress(Int), incrementProgressBy(Int)
반응형
저작자표시 비영리 (새창열림)
  1. Widget And Listener
'공부/Kotlin' 카테고리의 다른 글
  • [Kotlin] 9 - Widget And Listener
  • [Kotlin] 11 - Activity And Intent
  • [Kotlin] 8 - Layouts
  • [Kotlin] 7 - Android Native Kotlin 개발 환경 구축
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (1)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • Kotlin
  • 키 해시
  • webhacking
  • jsp
  • 자료구조
  • Python
  • cs
  • native app
  • spring
  • shared preference
  • ViewModel
  • 컴퓨터
  • 보안
  • 코틀린기본문법
  • android studio 삭제
  • Android Studio
  • docker
  • 알고리즘
  • Java
  • 1.9.22
  • React
  • SpringBoot
  • 프로그래밍
  • 자바빈즈
  • dreamhack
  • 상속
  • Computer science
  • 디버깅키해시
  • Database
  • api 통신

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[Kotlin] 10 - Widget And Listener
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.