2021. 11. 14. 19:36ㆍDiary/300~400
< 기존 소스 코드>

< 커스텀 소스 코드 >

RelativeLayout을 커스텀하고
EditText를 Style로 관리했다.
< Style >

이 Style을 통해
EditText의 속성을 정의할 수 있다.
< Attrs >

위의 Attrs는 언제 쓰일까?
바로 특정 기능을 커스텀하고 싶을 때 쓴다.
예를 들어, 체크박스 기능에서
사용자가 클릭하는 기능은 제거하고
특정 값에 따라서
활성, 비활성화만 하고 싶다면
커스텀을 해야한다.
나는 RelativeLayout을 커스텀하기
위해서 Attrs를 사용했다.
이유는 없고, 연습을 위해서이다.
Attrs를 사용하는 위치는
아래와 같다.


나는 이 status라는 attr를 가지고
커스텀을 해 볼 예정이다.
< MyRelative >

어찌저찌 쓰기는 했다.
onMeasure은 뷰의 크기를 정할 때,
호출되고
onDraw는 뷰를 그릴 때,
호출된다.
다만, onDraw에서는 Log가 안찍히고
onMeasure에서는 Log가 찍혀서
onMeasure에다가 로직을 구현했는데
이게 Layout이라서
onDraw의 로직이
작동 안한거라고 생각이 든다.
아니면 onDraw에서는
캔버스를 활용한 로직만 작동하는건지..
자세히 모르겠다.
또한,

위의 2개 constructor에서

이렇게 위에다가 작성하면
status 값이 제대로 안들어간다.
오로지

이렇게 밑에다가 적어야만
onMeasure에서
status값이 제대로 불러와진다.
이유를 모르겠다..;;
또한,

이렇게 작성해도
로직은 잘 구현된다.
왜 굳이 constructor를
따로따로 구현한 예제가
돌아다니는지 모르겠다.
그래서 방법을 찾다가
@JvmOverloads가 있길래
이를 활용해서 적용했다.
@JvmOverloads
어노테이션은
Default Method를 사용할 수 있게 해준다.
모든 경우의 Method를 생성해준다.
위의 로직을 설명하자면
RelativeLayout의
Attr을 가져온다.
그리고 그 Attr에서
status라는 String타입의 값을 찾는다.
그리고 그 값이
id와 password일 경우에
이미지의 색깔을 바꾼다.
여기서 중요한 것은.
onMesure, onLayout은
해당 레이아웃이 활성화 될 때
호출이 된다.
즉, 해당 레이아웃 안에 있는
View만 가지고 활용할 수 있다.
만약, status가 id인
RelativeLayout에서
status가 password인
RelativeLayout의
ImageView의 색깔을 바꾼다면
제대로 동작하지 않고
에러가 난다.
아무튼, 아직까지는 제대로 이해는 못했다.
다만, 대부분의 라이브러리 위젯들이
위의 방식으로 상속을 받아서
사용하는 것이라고 이해했다.
오늘은
Style, Attrs, Custom Widget의
사용 방법을 공부했다.
차주부터는 회사에서
디자인 이슈를 해결하게 될 것 같다.
앞으로는 블로그에 적는 글들이
70%는 성의가 없는 글이고
30% 팀 프로젝트 관련글일 것 같다.
최대한 시간을 잘 활용해서
꾸준히 글을 적어 볼 예정이다.
쓸게 도무지 없으면
대충 잡소리라도 적으려고 한다.
이상으로 글을 마친다~!
----- 2021-11-15 추가 -----
보조생성자가 여러개 있던 건
오버로딩을 위해서이다.
오버로딩은 간단하게
fun test(str:String)
fun test(int:Int)
test("문장")
test(3)
이런 식으로 매개변수의
타입에 따라 각기 다른 로직을
수행할 수 있게 해주는 방법이다.
그리고
onDraw에서 Log가 안찍힌건
background같이
그리는 속성값 자체를 안줘서이다.
또한
defStyle은 레이아웃 속성에서
style을 적을 경우
그쪽으로 빠지는 오버로딩이어서
그 안에 로직을 적으면
작동하지 않았던 거였다.
'Diary > 300~400' 카테고리의 다른 글
322일차 - IT 영단어 앱 : FCM Token & Firebase Store & Fragment 화면 전환 (0) | 2021.11.16 |
---|---|
321일차 - IT 영단어 앱 간단한 구조 잡아놓기 (0) | 2021.11.15 |
319일차 - RxJava & RxKotlin & Retrofit2 (0) | 2021.11.13 |
318일차 - MBTI 앱 레거시 코드 개편 (0) | 2021.11.12 |
317일차 - DiffUtil (0) | 2021.11.11 |