안드로이드 style theme 구현하는 방법.

주의) 저는 안드로이드 개발 초보입니다. 틀린 내용이 있을수 있습니다!
번거로우시겠지만 알려주시면 감사하겠습니다.

-------------------------------------------------------------------------------------------------------

어떤 키를 사용할지 선언한다. format에는 아래 타입의 값을 사용할 수 있다.
(Reference, String, Color, Dimension, Boolean, Integer, Float, Fraction, Enum, Flag)

attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="customAttrs">
    <attr name="id_A" format="reference" />
</declare-styleable>
</resources>

-------------------------------------------------------------------------------------------------------

values, drawable, drawable-xhdpi 등의 원하는 폴더에 xml 파일을 만든다.
(android:Theme.Holo 는 바꿔주거나 없어도 된다.)

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="styleA" parent="android:Theme.Holo">
        <item name="id_A">@drawable/id_A_dark</item>
    </style>
    <style name="styleB" parent="android:Theme.Holo">
        <item name="id_A">@drawable/id_B_Light</item>
    </style>
</resources>

-------------------------------------------------------------------------------------------------------

manifest 의 application 이나 activity 에 테마를 설정한다.
(또는 코드로.. 안해봤지만 아마 있을거다.. __;;)

android:theme="@style/styleB"

-------------------------------------------------------------------------------------------------------

아래와 같이 사용한다.
위의 manifest에서 셋팅한 테마에 해당하는 값을 가져온다.

xml에서
<ImageButton
...........
android:src="?attr/id_A" />

소스에서 접근방법.
R.attr.id_A

-------------------------------------------------------------------------------------------------------

응용하면 여러군데에서 사용할 수 이겠지만 declare-styleable 의 이름에서 알수 있듯이 스타일에 특화된 것이니 스타일 이외의 부분에선 가급적 자제하길 바란다.

댓글

이 블로그의 인기 게시물

파이썬 vscode에서 자동 코드 정렬. Formatter.

Unity3D git 저장소에 올릴때 필요없는 파일 제외하기. gitignore

플러터(flutter) 개발 참고 사이트들.