안드로이드

[안드로이드] 테마 유지하면서 배경이 투명한 다이얼로그 액티비티 만들기

부르스리 2017. 1. 19. 14:27
반응형


팝업 형태로 액티비티를 띄울 일이 많이 있다.


다이얼로그를 상속받아서 만들수도 있지만


액티비티가 편한 경우가 많기 때문에 액티비티를 다이얼로그처럼 보이게 많이들 한다.


지금 메모장을 하나 만들고 있는데 메모 입력창을 작게 만들고 팝업 형태로 만들기 위해


이전부터 써왔던 코드를 사용했었다.


<activity
android:name="MyActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"

/>


이렇게 적용하고 나면 배경이 투명해지고 다이얼로그 팝업 형태로 나온다.


그리고 배경에 디밍을 주기 위해서 onCreate() 함수에서 아래와 같이 해줘야 했다.


WindowManager.LayoutParams lpWindow = new WindowManager.LayoutParams();
lpWindow.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
lpWindow.dimAmount = 0.5f;
getWindow().setAttributes(lpWindow);


그런데 이렇게 적용하고 나면 다 좋은데...최신 테마가 적용이 안된다는 단점이 있다.


이전에는 몰랐는데 최근에는 Material 이나 Holo 등 깔끔한 테마들이 


폰에 기본으로 되어있는데 저렇게 Translucent 테마를 쓰면 이전의 고리타분한 


테마가 적용되어버린다.


버튼이든 에딧박스든 스피너든 뭐든 하여간 올드한 스타일이 되어버린다.


디자인한 콘트롤들이 들어가고 동작만 잘되면 상관이 없겠지만


기본 콘트롤을 사용하는 입장에서는 여간 거슬리는 게 아니다. 짜증이 나는 수준.


그래서 기존 테마를 유지하면서 같은 효과를 내기 위해서 테스트를 많이 했다.


그래서 찾아낸 결과는 다음과 같다.


일단 스타일을 하나 만든다.


<style name="AppThemeDialog" parent="AppBaseTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@color/dim50</item>
</style>

윈도우 백그라운드는 컬러값을 직접 넣을 수 없기 때문에 color.xml 에 미리 정의해 주어야 한다.


이렇게 만들어 놓고 이 스타일을 액티비티에 적용한다.


<activity
android:name="MyActivity"
android:theme="@style/AppThemeDialog"

/>


이걸로 끝이다.


액티비티 onCreate() 에 있던 코드는 없어도 된다. 싹 지워버리자.


아주 깔끔한 신 테마가 적용된 다이얼로그 형태의 액티비티를 만나볼 수 있다.


어휴 속시원해...




반응형