티스토리 뷰

Android/Layout

[ Layout #4 ] DarkTheme 적용하기.

녹색꼬맹이 2020. 1. 17. 22:35
반응형
SMALL

 

[ attrs.xml ]

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="bgColor" format="color"/>
    <attr name="titletextColor" format="color"/>
    <attr name="subtitletextColor" format="color"/>
</resources>

 

[ styles.xml ]

<style name="LightTheme" parent="AppTheme">
	<item name="titletextColor">#000000</item>
	<item name="subtitletextColor">#606060</item>
	<item name="bgColor">#ffffff</item>
</style>

<style name="DarkTheme" parent="AppTheme">
	<item name="titletextColor">#ffffff</item>
	<item name="subtitletextColor">#aeaeae</item>
	<item name="bgColor">#000000</item>
</style>

 

반응형

 

테마를 입혀줄 XML 지정.

[ activity_main.xml ]

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
	..
    	..
    android:background="?attr/bgColor">	// 변경할 곳에 attr 속성 적용.

    <TextView
    	..
        ..
        android:textColor="?attr/titletextColor"/>

    <TextView
    	..
        ..
        android:textColor="?attr/subtitletextColor"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

[ MainActivity.kt ]

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
            setTheme(R.style.DarkTheme)
        } else {
            setTheme(R.style.LightTheme)
        }

        setContentView(R.layout.activity_main)

        (임의의 View).setOnClickListener {

            // AppCompatDelegate.MODE_NIGHT_NO : 앱의 기본 테마를 설정하고 res/values 디렉토리에 정의 된 색상을 사용합니다. 주로 밝은 테마에서 사용.
            // AppCompatDelegate.MODE_NIGHT_YES : 앱의 야간 테마를 설정하고 res/values-night 디렉토리에 정의 된 색상을 사용합니다. 주로 어두운 테마에서 사용.
            // AppCompatDelegate.MODE_NIGHT_AUTO : values 및 values-night 정의한 색상 ( values-night 디렉토리)에 따라 앱의 색상을 자동으로 전환합니다.

            if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
            } else {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
            }

            finish()
            startActivity(Intent(this@MainActivity, this@MainActivity.javaClass))   // MainActivity Restart
        }
    }
반응형
LIST
댓글