티스토리 뷰
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 정의해서 사용하면 더 확장해서 사용할수 있을듯!
아직 테스트해보진 않았지만 -ㅅ-!
- Total
- Today
- Yesterday
- 책
- Java
- Mac
- 서울숲별밤축제
- 야마다 타카유키
- 코이데 케이스케
- 안드로이드
- 인디
- 포스트크로싱
- 드라마
- 공연
- 일기
- 음악
- 신주쿠
- 일어일기
- android
- Linux
- 아사가야
- postcrossing
- 진해
- epik high
- 에픽하이
- 잡담
- 사진
- 영화
- 노래
- 락
- 도쿄
- 여행
- 일본
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |