app이 Theme.Holo.Light.DarkActionBar 테마를 사용하는 경우
기본적으로는 Holo.Light 테마 이지만 ActionBar만 Holo(Dark) 테마가 적용되게 된다.
따라서 ActionBar위에 붙는 widget들 (ListMenuItemView, IconMenuView, overflow popup등) 은 알아서 처음에 actionbar가 구성될때 Holo(Dark) 테마로 설정되어 검정계통의 스타일을 얻게 된다.
그리고 그외 activity 내에 붙는 widget들은 모두 Holo.Light 테마로 생성되게 된다.
하지만 widget을 Holo.Light가 아닌 Holo(Dark)로 생성하고 싶다면
이미 잘 알고 있듯이 Theme 를 정의할때 style을 적용해 주면 된다.
<style name="MyTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:checkboxStyle">@android:style/Widget.Holo.CompoundButton.CheckBox</item>
</style>
하지만 이 방법은 app의 모든 CheckBox가 Holo(Dark)로 생성이 된다.
그래서 어떤 CheckBox는 Holo.Light이고 어떤 CheckBox는 Holo(Dark)이고..
이렇게 다르게 생성하려면 어떻게 해야할까??
android 소스를 뒤져서 드뎌 찾아냈다 -ㅅ-!
TypedValue outValue = new TypedValue();
Resources.Theme currentTheme = getTheme();
currentTheme.resolveAttribute(android.R.attr.actionBarWidgetTheme, outValue, true);
final int targetThemeRes = outValue.resourceId;
ContextThemeWrapper themedContext = new ContextThemeWrapper(this, targetThemeRes);
CheckBox darkCheckBox = new CheckBox(themedContext);
android 소스의 themes.xml을 보면
actionBarWidgetTheme가 Theme.Holo로 정의되어 있는 것을 볼수 있다.
<style name="Theme.Holo.Light.DarkActionBar">
<item name="android:windowContentOverlay">@android:drawable/ab_solid_shadow_holo</item>
<item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item>
<item name="actionBarWidgetTheme">@android:style/Theme.Holo</item>
......
따라서 android.R.attr.actionBarWidgetTheme 값을 얻어와서 그곳에 적용된 style대로 widget을 생성하는 것이다.
더 나아가서는 새로 attr정의해서 원하는 style 정의해서 사용하면 더 확장해서 사용할수 있을듯!
아직 테스트해보진 않았지만 -ㅅ-!
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 앱위젯 appwidget 만들기 1탄 (0) | 2013.12.27 |
---|---|
안드로이드 - PHP로 GCM 메시지 보내기 (0) | 2013.12.25 |
안드로이드 - php를 이용한 gcm 푸시 예제[2] (0) | 2013.12.25 |
안드로이드 - php를 이용한 gcm 푸시 예제[1] (0) | 2013.12.25 |
안드로이드 - GCM이용시 com.google.android.gms import 에러 해결법 (2) | 2013.12.22 |
안드로이드 - GCM 활용해서 푸시 메세지 전송기 (0) | 2013.12.22 |
안드로이드 - XmlPullParser 사용시 유의법(규칙) (0) | 2013.12.18 |
안드로이드 - ImageDownloader 분석 (0) | 2013.12.07 |