Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 기존 앱
- 스크롤 탭
- transformation.map
- 상단 탭바
- development language
- Tuist
- url 관찰
- UIViewControllerTransitioningDelegate
- Swift Package Manager
- ios
- UIPresentationController
- base64 변환
- DevelopmentRegion
- ViewBuilder
- SwiftUI
- swift #swift keychain #keychain 사용법
- Android
- Side Menu
- List
- swift
- 개발자 면접
- scrolling tab
- notifychanged
- pod install
- GeometryReader
- convert base64
- oberve url
- url 추적
- DataBinding
- detect url
Archives
- Today
- Total
버그 잡이
[코틀린] kotlin 커스텀뷰(customView) 만들기 본문
TextView, ImageView 등 기본적으로 제공되는 view 이외에도 자신이 원하는 customView를 만들어 사용할 수 있다.
왜 굳이 그렇게 해야하냐고?
- 자주 쓰이는 패턴이 있는데 일일이 만들기에는 시간이 많이 걸리고, 복붙해서 쓰자니 코드가 지저분해진다.
- 또, customView에 메소드를 만들어 사용할 수 있다. 내가 원하는 동작을 보다 깔끔하게 반영할 수 있는 것이다.
*코드 출처
(유튜버 디모님)
https://www.youtube.com/watch?v=hr-ZDc2mNZE&list=PLQdnHjXZyYaemV1ievGAfgE-YXp3HddnK&index=5
[순서]
1. xml 파일을 만든다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="8dp">
<ImageView
android:id="@+id/typeImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_alarm_black"/>
<TextView
android:id="@+id/infoText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"/>
</LinearLayout>
- 알람 아이콘과 그 옆에 알람시간이 나오는 구성이다.
2. view 클래스를 만든다.
open class InfoView @JvmOverloads constructor(context: Context, attrs: AttributeSet?=null, defStyleAttr: Int=0)
: LinearLayout(context, attrs, defStyleAttr){
companion object{
private val dateFormat = SimpleDateFormat("yy/MM/dd HH:mm")
}
init{
inflate(context, R.layout.view_info, this)
typeImage.setImageResource(R.drawable.ic_alarm_black)
infoText.setText("")
}
fun setAlarmDate(alarmDate: Date){
if(alarmDate.before(Date())){ //현재 시간보다 이전이면 알람이 없다고 표시
infoText.setText("알람이 없습니다.")
}
else{
infoText.setText(dateFormat.format(alarmDate))
}
}
}
- LinearLayout을 상속받음으로써 xml파일을 하나의 뷰로 만들 수 있다
*Layout기반의 customView를 만들 경우 기반이 되는 레이아웃을 상속받아야 해당 레이아웃을 inflate 할 수 있다.
*View를 상속받아서 만드는 CustomView는 Canvas를 할용해서 직접 그리는 customView 같다(?)
- init을 통해서 view의 초기상태를 설정한다.
- setAlarmDate와 같은 메서드도 구현할 수 있다.
*JVMOverLoad란 무엇인가?
- 커스텀 뷰를 정의할때는 생성자를 여러개 선언해야 하는데(overload) 이를 쉽게 정의할 수 있게 도와주는 놈이다.
반응형
'안드로이드 > 코틀린' 카테고리의 다른 글
[Kotlin] Generic 제네릭 #base 클래스 generic 코드 해석하기 (0) | 2020.06.15 |
---|---|
[코틀린] Kotlin RecyclerView 각 요소 살펴보기 (0) | 2020.04.02 |
[코틀린]Kotlin floating button 클릭시 로딩 회전 #extend floating button #loading (0) | 2020.03.27 |
[코틀린]kotlin Arraylist to Array 변환 (0) | 2020.03.26 |
android kotlin extended floatingButton(코틀린 플로팅 버튼) (0) | 2020.03.14 |
Comments