지식쌓기
kotlin - View 확장 class 생성자
바나나쥬스
2020. 2. 7. 14:19
View 클래스들을 확장해서 정의할때
생성자 3개인가 다 정의해줘야 되서 구찮았는데 (os버전따라 4개인경우도)
kotlin에선 간단히 한줄로
class CustomTextView @JvmOverloads constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int = 0)
: TextView(context, attrs, defStyleAttr)
하지만 저렇게 정의하면 xml에서 정의한 style이 안먹는다네?
그래서 style이 먹어줘야하는 view들은 결국 3개다 정의 ㅋ
class CustemTextView : TextView {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyle: Int = 0) : super(context, attrs, defStyle)
}
참고로 @JvmOverloads
/**
* Instructs the Kotlin compiler to generate overloads for this function that substitute default parameter values.
*
* If a method has N parameters and M of which have default values, M overloads are generated: the first one
* takes N-1 parameters (all but the last one that takes a default value), the second takes N-2 parameters, and so on.
*/
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR)
@Retention(AnnotationRetention.BINARY)
@MustBeDocumented
public actual annotation class JvmOverloads