2020. 12. 31. 23:21ใ๐ฑAndroid/๐ Android Study
์๋๋ก์ด๋์์ darkmode(์ด๋์ด ํ ๋ง)๋ Android 10 (API ๋ ๋ฒจ 29) ์ด์์์ ์ ๊ณต๋์ด์ง๋ ๊ธฐ๋ฅ ์ค ํ๋์ธ๋ฐ์.
์ค๋์ ์๋๋ก์ด๋์์ ๋คํฌ๋ชจ๋๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์๊ฐํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
๐ activity_main.xml ํ๋ฉด ๊ตฌ์ฑ
Light ๋ชจ๋ / Dark ๋ชจ๋ / System ์ค์ ์ ๋ฐ๋ผ ๋ณ๊ฒฝํ ์ ์๊ฒ RadioButton์ ๋ง๋ค์ด ์ฃผ์์ต๋๋ค.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@color/color_dark_ffffff_0000000"
android:id="@+id/cl_background">
<TextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ํ
๋ง ์ค์ "
android:textSize="20sp"
android:textColor="@color/color_dark_000000_ffffff"
app:layout_constraintVertical_bias="0.3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<RadioGroup
android:id="@+id/radioMode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintVertical_bias="0.2"
app:layout_constraintTop_toBottomOf="@id/txtTitle"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Light"
android:textColor="@color/color_dark_000000_ffffff"
android:buttonTint="@color/colorAccent"
android:id="@+id/rbLight"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dark"
android:buttonTint="@color/colorAccent"
android:textColor="@color/color_dark_000000_ffffff"
android:id="@+id/rbDark"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Default"
android:buttonTint="@color/colorAccent"
android:textColor="@color/color_dark_000000_ffffff"
android:id="@+id/rbDefault"/>
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>
text์ ์๊ณผ activity ๋ฐฐ๊ฒฝ์์ด dark/light ๋ชจ๋์ ๋ฐ๋ผ ์์ ๋ณ๊ฒฝํด์ฃผ๊ธฐ ์ํด์๋ night์ color.xml์ด ์ถ๊ฐ๋ก ํ์ํฉ๋๋ค!
โ๏ธvalues-night ํด๋ ์ถ๊ฐํด์ฃผ๊ธฐ
values ์ค๋ฅธ์ชฝ ํด๋ฆญ -> New -> Directory -> .../app/src/main/res/values-night ์ถ๊ฐํด์ฃผ๊ธฐ
โ๏ธcolors.xml (night) ์ถ๊ฐํด์ฃผ๊ธฐ
values ์ค๋ฅธ์ชฝ ํด๋ฆญ -> New -> Values Resource File
์ด๋ Directory name์ values-night๋ก , File name์ color๋ก ์ค์ ํด์ฃผ์ธ์!
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="color_dark_000000_ffffff">#000000</color>
<color name="color_dark_ffffff_000000">#ffffff</color>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
</resources>
night/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="color_dark_000000_ffffff">#ffffff</color>
<color name="color_dark_ffffff_000000">#000000</color>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
</resources>
colors.xml ์์์ ๋์ผํ name์ผ๋ก ๋ง๋ค์ด ์ฃผ๊ณ , darkmode์์ ์ํ๋ ์์ ์ง์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ ๋ name๋ช ์ ์์๋ณด๊ธฐ ์ฝ๊ฒ {color_dark_light๋ชจ๋์ผ๋์์_dark๋ชจ๋์ผ๋์์} ์ผ๋ก ์ค์ ํด์ฃผ์์ต๋๋ค.
๐ MainActivity.kt
๊ฐ๊ฐ์ Radio ๋ฒํผ์ ํด๋ฆญ์ ์ฑ์ด light/dark ๋ชจ๋๊ฐ ๋ ์ ์๋๋ก Radio ๋ฒํผ Check ์ด๋ฒคํธ๋ฅผ ๋๋ค์์ผ๋ก ๊ตฌํํด์ฃผ์์ต๋๋ค.
radioMode.setOnCheckedChangeListener { _, checkedId ->
when(checkedId) {
R.id.rbLight -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
R.id.rbDark -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
}
R.id.rbDefault -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY)
}
}
}
}
Light ๋ชจ๋ ์ค์
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
Dark ๋ชจ๋ ์ค์
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
์์คํ ์ค์ ์ ๋ฐ๋ผ
API 29 ๋ถํฐ Darkmode๊ฐ ์ง์๋๋ฏ๋ก Version์ ๋ฐ๋ผ ์ค์ ์ ๋ค๋ฅด๊ฒ ํด์ค์ผ ํฉ๋๋ค!
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
//APP SDK ๋ฒ์ ์ด Q๋ณด๋ค ํด ๋ (API 29 ์ด์)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
} else {
//APP SDK ๋ฒ์ ์ด Q๋ณด๋ค ์์ ๋ (API 29 ๋ฏธ๋ง)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY)
}
๐ ๊ตฌํ ํ๋ฉด
์ฐธ๊ณ
'๐ฑAndroid > ๐ Android Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android/Kotlin] ์ธ์ด์ค์ (Eng / Kor) ๋ณ๊ฒฝํ๊ธฐ (0) | 2021.01.01 |
---|---|
[Android/Kotlin] Splash ํ๋ฉด ๋ง๋ค๊ธฐ (0) | 2020.12.31 |
[Android/Kotlin] - WebView ์ฌ์ฉํ๊ธฐ (0) | 2020.12.30 |