반응형
public class CusView extends View
{
static String TAG = CusView.class.getSimpleName();
public CusView(Context context) { //코드상에서 부를때 호출된다.
super(context);
Log.d(TAG, "CusView(Context context) 호출");
}
public CusView(Context context, @Nullable AttributeSet attrs) { // XML에서 부를때 호출된다.
//View가 Inflating될 때 3번째 생성자를 호출하는 것이 일반적임
this(context, attrs, R.attr.editTextStyle);
Log.d(TAG, "CusView(Context context, @Nullable AttributeSet attrs) 호출");
// attrs 기본 속성들을 세팅할 때 사용한다.
}
public CusView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
Log.d(TAG, "CusView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) 호출");
}
public CusView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
Log.d(TAG, "CusView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) 호출");
}
// defStyleAttr : R.attr.XXX
// defStyleRes : R.style.XXX
}
첫번째 생성자는 코드에서 뷰를 호출할 때 사용되는 생성자이고 두번째 생성자는 XML에서 호출할 때 사용된다.
보통 기본 속성들을 세팅할 때 두번째 생성자에서 세번째 생성자를 호출하는 것이 일반적이다. (일반 SDK View들을 보면 보통 이런식)
※ attrs에 무슨 값이 들어오는 디버깅 해봤지만 Xml의 부모뷰 이름만 확인할 수 있었다.
4번째 생성자보면 defStyleAttr이랑 defStyleRes가 있는데 전자는 R.attr.XXX의 아이디 값을 의미하는거고 후자는 R.style.xxx을 의미한다.
반응형
'OS > Android' 카테고리의 다른 글
안드로이드 targetSdkVersion 29에서 외부저장소 접근하기 (0) | 2020.09.18 |
---|---|
No field with the name mListener is found in Animation class (0) | 2020.09.08 |
안드로이드 Command Line으로 bundle 만들기 (0) | 2020.07.13 |
안드로이드 유튜브 검색 크롤링 (0) | 2020.07.07 |
More than one file was found with OS independent path 'META-INF/app_release.kotlin_module' (0) | 2020.04.16 |