오늘은 안드로이드 UI작업을 하면서,

알아두면 좋을 작은 팁들을 모아서 정리해 보도록 하겠습니다.

 

1. 하나의 Activity에만 다른 Theme을 적용하는 방법

특정 Activity에만 다른 theme을 적용하고자 할 때는 다음과 같이 해주면 되는데요.

먼저 App의 기본 theme을 상속받은 상태에서,

colorPrimarycolorPrimaryDark만 바꾸어 주는,

SecondTheme을 하나 만든다고 하겠습니다.

앱의 style.xml파일에 기존의 AppTheme밑에 아래와 같이 추가해 주면 되는데요.

 

그럼 이것을 해당 Activity의 theme에 적용시켜주어야 하는데요.

Manifest에서 SecondActivity의 theme을 아래와 같이 해서 적용해 줍니다.

 

 

2. StatusBar Color변경하는 방법

StatusBar컬러를 변경하는 방법은 여러가지가 있습니다.

그중 가장 쉬운 방법은 Style의 colorPrimaryDark를 변경해 주는 것 인데요.

만약, 하나의 Activity에만 다른 StautsBar컬러를 변경하고 싶다면,

다른 테마로 colorPrimaryDark를 설정해 준다음.

위에서 정리한 대로, Manifest에서 적용해주면 됩니다.

 

3. 화면이 계속 켜져있도록 하는 방법

화면이 계속 켜져있도록 하기 위해서 아래와 같이

window객체를 얻어온다음 addFlags함수의 인자에 FLAG_KEEP_SCREEN_ON을 넣어주면 됩니다.

 

4. DialogFragment가 dismiss되는 것을 막기 위한 방법

A. Back키로 Dismiss되는 것을 막는 방법

B. Dialog의 바깥쪽 부분을 클릭시 Dismiss되는 것을 막기 위한 방법

onCreateView에서 아래와 같이 cancel되지 않도록 해 줍니다.

 

5. StatusBar 투명하게 하기

앱의 디자인에 따라서 상단을 투명하게 해야할 경우가 있는데요.

안드로이드 답게 대응방법이 복잡합니다.

구글에서 라이브러리로 지원해 주었으면 좋겠네요.

 

 

6. RecyclerView 스크롤 영역

RecyclerView를 사용할 때, Scroll영역아래에 패딩을 주면서

컨텐츠가 넘쳤을 때, 스크롤이 패딩 아래로 흐르게 하려면 아래와 같이,

clipToPadding옵션을 주면 됩니다.

이러한 설정은 ScrollView에도 마찬가지로 적용할 수 있습니다.

 

 

7. Activity에 부모와 다른 theme적용하기

 

8. ConstraintLayout에서 1:1비율 만들기

만약 ConstraintLayout에서 1:1비율을 만들고자 한다면 다음과 같이 해 주면 되는데요.

height를 0으로 만들고, layout_constraintDimensionRatio라는 프로퍼티를 1:1로 사용해 주면 됩니다.

마찬가지 방식으로 다른 비율도 만들 수 있겠습니다.

 

9. FragmentDialog가 두번 불려지는 현상

FragmentDialog는 작업하기 쉬운것 같으면서도,

처음에는 이해하기 어려운 현상들을 볼 수 있습니다.

그 중에서도 까다로운 것이,

유저가 FragmentDialog상태에 있다가 다른 앱을 사용한 후 돌아올 때,

두번씩 호출되는 경우가 있는 것인데요.

 

10. Admob의 initilize는 Applicaiton클래스에서 한 번 만

예를 들면, context를 인자로 가지는

MobileAds.initialize(this)와 같은 코드는 Application클래스에서 한번만 호출해 주면 됩니다.

아무생각없이 공식문서에서 하는 것 만 따라해서,

모든 Activity에서 호출 할 필요는 없는 것 이지요.

 

11. DialogFragment Title없애는 방법

kitkat같은 폰에서는 DialogFragment의 타이틀이 비어있는 상태로 보여질 수 가 있는데요.

이 때, onCreateDialog에서 다음과 같이 설정해 주면 됩니다.

 

 

12. RecyclerView의 ViewHolder에서 getAdapterPosition() 사용할 때

아래 글에서도 한번 언급했었는데요.

클릭이나 체크된 아이템의 위치를 얻어오기 위해서, getAdapterPosition을 사용할 때,

항상 NO_POSITION인지 확인해 주어야 합니다.

ArrayIndexOutOfBoundsException과 ViewHolder의 getAdapterPosition사용

 

 

13. RecyclerVIew에서 깜박임을 방지하기 위한 방법

adapter에서 깜박임을 방지하기 위해서는 다음과 같은 두가지 일을 해 주면 되는데요.

a. setHasStableIds(true)

b. getItemId(int position)

 

이 두단계를 하면서 주의해야 할 점은 다음과 같습니다.

어댑터에서 setHasStableIds를 할 때,

recyclerVIew에 set해 주기 전에 해 주어야 아래와 같은 에러를 피할 수 있습니다.

 

 

또한 adapter에서 getItemId를 override해서 구현할 때,

return값은 long이어야 하므로,

unique한 id값이 있다면 이를 사용하고,

id값이 없다면 유니크한 string의 hashcode값을 이용하는 것이 좋습니다.

 

 

14. setOnCheckedChangeListener의 isChecked

 

setOnCheckedChangeListener가 듣는 isChecked값은

눌려서 변경된 값입니다.

예를 들면, checkBox가 on되어있을 때는,

사용자가 클릭할 때를 기준으로,

isChecked값이 off로 넘어온다는 것 이지요.

사용자가 클릭하기전에 on상태에 있었으므로, 클릭하면 on이 넘어오겠지하고,

무심코 코딩하면 잘못된 결과를 얻을수 있습니다.

 

 

15. 텍스트에서 일정 글자수 이상이 나오면 ...을 보이도록 ellipse하는 방법

중요한 것은, singlieLine과 ellipsize 그리고 maxEms를 조합해서 사용하는 것 인데요.

글자수에 대한 설정은 maxEms를 이용하면 되구요.

(실제 글자수의 설정은 아닙니다.)

ellipsize를 end로 함으로서 마지막 글자가 넘치면 ...으로 보여지게 됩니다.

 

 

 

 

 

+ Recent posts