Edge-to-edge-decorator - ΡΡΠΎ ΠΊΠ»Π°ΡΡ-ΡΡΠΈΠ»ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ statusBar
ΠΈ navigationBar
Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ edge-to-edge (e2e) ΡΠ΅ΠΆΠΈΠΌΠ°.
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° WindowPreferencesManager ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠ½ΠΎΠ½Π΅Π½ΡΠΎΠ².
Π‘ Π²ΡΡ
ΠΎΠ΄ΠΎΠΌ Android 10, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Google ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»Π° ΠΆΠ΅ΡΡΠΎΠ²ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΈ edge-to-edge ΡΠ΅ΠΆΠΈΠΌ. ΠΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ
ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ statusBar
ΠΈ navigationBar
, ΠΈ ΡΠ΅Π»Π΅ΡΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ
Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΡΠ°ΠΌΠΎΡΠ½ΡΠΌ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΡΠ΅Π·ΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΌΠ΅Ρ, Π° ΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ edge-to-edge Π² Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ 2 Π²Π΅ΡΠΈ:
ΠΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΠΈΡ
ΠΊΠ°ΠΊ padding
Π² Π²Π΅ΡΡΡΠΊΡ Π΄Π»Ρ Π²Π°ΡΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². Insets ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π²ΡΠ΅ΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Android OS,
ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ edge-to-edge Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈΠ½Π° Π¦Ρ
ΠΎΠ²ΡΠ΅Π±ΠΎΠ²Π°.
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΎΡ Chris Banes Insetter.
2. ΠΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΆΠΈΠΌ edge-to-edge Π΄Π»Ρ statusBar
ΠΈ navigationBar
. ΠΠΎ ΡΠ°ΠΊΡΡ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ
ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΌΠΈ
Π’ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π³Π»ΡΠ±ΠΎΠΊΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π»ΠΈΠ·Π° OS ΡΠΆΠ΅ Π½Π΅Π»ΡΠ·Ρ.
ΠΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ° ΠΈΠΊΠΎΠ½ΠΎΠΊ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
(statusBar
ΠΈ navigationBar
) ΡΠΎ ΡΠ²Π΅ΡΠ»ΠΎΠ³ΠΎ Π½Π° ΡΠ΅ΠΌΠ½ΡΠΉ.
ΠΠΎΡΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π΅ΡΡΠΈΠΈ Android:
-
Π΄ΠΎ 6.0 Π²Π΅ΡΡΠΈΠΈ android ΠΈΠΊΠΎΠ½ΠΊΠΈ
statusBar
ΠΈnavigationBar
Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π΅ΡΠ»ΡΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΠΈΡ Π² ΡΠ΅ΠΌΠ½ΡΠΉ ΡΠ²Π΅Ρ Π½Π΅Π»ΡΠ·Ρ.
Π€Π»Π°Π³View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
Π΄ΠΎΡΡΡΠΏΠ΅Π½ Ρ 23 API. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π²ΡΠ΅Π³Π΄Π° ΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ. Π£ΡΠΈΠ»ΠΈΡΠ°, ΡΡΠΎΠ±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΡ ΠΈΠΊΠΎΠ½ΠΎΠΊ Π½Π° ΡΠΎΠ½Π΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ½Π° Ρ 50% ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ; -
Ρ Π²Π΅ΡΡΠΈΠΈ 6.0 ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ, Π±Π΅Π»ΡΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ½ΡΠΌΠΈ Π±ΡΠ΄ΡΡ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π²
statusBar
.
ΠΠ΄Π½Π°ΠΊΠΎnavigationBar
Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ , ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»ΡstatusBar
. Π€Π»Π°Π³View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
Π΄ΠΎΡΡΡΠΏΠ΅Π½ Ρ 26 API. -
Ρ Π²Π΅ΡΡΠΈΠΈ 8.0 ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π±Π΅Π»ΡΠΉ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ edge-to-edge ΠΈ ΠΆΠ΅ΡΡΠΎΠ²ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠ°ΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π» Chris Banes.
Android 5.0 (API level 21) | Android 7.1 (API level 25) | Android 9 (API level 28) | Android 11 (API level 30) |
dependencies {
implementation("com.redmadrobot:edge-to-edge-decorator:1.0.0")
}
ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅ΠΌΠ° Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»Π°ΡΡ ΠΎΡ Theme.MaterialComponents.*
.
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΠ²Π΅Ρ ΡΠΎΠ½Π° Π΄Π»Ρ AppBarLayout
ΠΈ background
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
<item name="colorPrimary">@color/colorPrimary</item> <!-- or colorPrimarySurface -->
<item name="android:windowBackground">@color/windowBackground</item>
ΠΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
appBarColorAttr
ΠΈ backgroundColorAttr
.
ΠΡΠ»ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΠΊΡΠ°Π½Π΅ Π²Ρ Π·Π°Ρ
ΠΎΡΠΈΡΠ΅ Π²ΡΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ edge-to-edge (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ isEdgeToEdgeEnabled = false
),
ΡΠΎ Π² ΡΠ΅ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ²Π΅ΡΠ° statusBar
ΠΈ navigationBar
:
<item name="android:statusBarColor">@android:color/black</item>
<item name="android:navigationBarColor">@android:color/black</item>
4. ΠΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠΈΡΡ ΡΠ»Π°Π³ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ NavigationBar
<item name="android:enforceNavigationBarContrast" tools:targetApi="q">false</item>
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ ΡΠ»Π°Π³ enforceNavigationBarContrast
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠ°ΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π» Chris Banes.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠ° edge-to-edge
EdgeToEdgeDecorator
.updateConfig {
// custom config
isEdgeToEdgeEnabled = true
appBarColorAttr = R.color.colorPrimary
backgroundColorAttr = R.color.windowBackground
}
.apply(context, window)
Π£ΡΠΈΠ»ΠΈΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² 3-Ρ ΡΠ΅ΠΆΠΈΠΌΠ°Ρ :
-
ΠΡΠΎΡΡΠΎΠΉ (ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ).
- Π¦Π²Π΅Ρ
statusBar
ΠΈnavigationBar
- ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ; - Π¦Π²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ
statusBar
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ²Π΅ΡΡAppBarLayout
. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡappBarColorAttr
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡR.attr.colorPrimarySurface
) - Π¦Π²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ
navigationBar
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ²Π΅ΡΡ ΡΠΎΠ½Π° Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡbackgroundColorAttr
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡandroid.R.attr.windowBackground
). - ΠΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΠΆΠΈΠΌ edge-to-edge.
Πwindow.decorView.systemUiVisibility
ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΡΠ»Π°Π³ΠΈView.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
)
- Π¦Π²Π΅Ρ
-
ΠΠ°ΡΡΠΎΠΌΠ½ΡΠΉ - Π½Π° ΡΠΊΡΠ°Π½Π΅ Π½Π΅Ρ
AppBarLayout
ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΎΠ΄navigationBar
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅ΡBottomNavigationMenu
.- Π¦Π²Π΅Ρ
statusBar
ΠΈnavigationBar
- ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ; - Π¦Π²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ
statusBar
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ²Π΅ΡΡ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅contentUnderStatusBarCustomColor
. - Π¦Π²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ
navigationBar
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ²Π΅ΡΡ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅contentUnderNavBarCustomColor
. - ΠΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΠΆΠΈΠΌ edge-to-edge.
- Π¦Π²Π΅Ρ
-
Π Π΅ΠΆΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ.
ΠΡΠ»ΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠ²Π΅Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅Π»ΡΠ·Ρ, ΡΠΎ Π΄Π»ΡstatusBar
ΠΈnavigationBar
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠ³ΠΎ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡstatusBarEdgeToEdgeColor
ΠΈnavBarEdgeToEdgeColor
.
ΠΠ»Ρ Π²ΡΠ΅Ρ
ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ
Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Android OS.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ statusBarCompatibilityColor
ΠΈ navBarCompatibilityColor
.
Π£ΡΠΈΠ»ΠΈΡΠ° ΠΈΠΌΠ΅Π΅Ρ dsl ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΡΠΈΠΌΠ΅Ρ:
override val edgeToEdgeCompatibilityManager = EdgeToEdgeDecorator.updateConfig {
// custom config
isEdgeToEdgeEnabled = true
appBarColorAttr = R.color.colorPrimary
backgroundColorAttr = R.color.windowBackground
}
ΠΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ DefaultConfig
class DefaultConfig {
/**
* Π€Π»Π°Π³ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅/Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ edge-to-edge ΡΠ΅ΠΆΠΈΠΌΠ°.
*/
var isEdgeToEdgeEnabled = true
/**
* Π ΠΏΡΠΎΡΡΠΎΠΌ edge-to-edge ΡΠ΅ΠΆΠΈΠΌΠ΅. Π¦Π²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ statusBar ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ
* Ρ ΡΠ²Π΅ΡΠΎΠΌ [com.google.android.material.appbar.AppBarLayout].
*
* ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π½ΠΎ [R.attr.colorPrimarySurface].
*
* Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ²Π΅Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ statusBar ΡΠ°Π²Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ [statusBarEdgeToEdgeColor],
* ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ [statusBarEdgeToEdgeColor] ΡΠ°Π²Π΅Π½ [Color.TRANSPARENT].
*
* Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡΠΎΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ [backgroundColorAttr]
*
* @see backgroundColorAttr
* @see statusBarEdgeToEdgeColor
*/
@AttrRes
var appBarColorAttr = R.attr.colorPrimarySurface
/**
* Π ΠΏΡΠΎΡΡΠΎΠΌ edge-to-edge ΡΠ΅ΠΆΠΈΠΌΠ΅. Π¦Π²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ navigationBar ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ
* Ρ ΡΠ²Π΅ΡΠΎΠΌ [android.R.attr.windowBackground]
*
* ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π½ΠΎ [android.R.attr.windowBackground]
*
* Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ²Π΅Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ navigationBar ΡΠ°Π²Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ [navBarCompatibilityColor],
* ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ [navBarCompatibilityColor] ΡΠ°Π²Π΅Π½ [Color.TRANSPARENT].
*
* Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡΠΎΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ [appBarColorAttr]
*
* @see appBarColorAttr
* @see navBarCompatibilityColor
*/
@AttrRes
var backgroundColorAttr = android.R.attr.windowBackground
/**
* ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° Π½Π° ΡΠΊΡΠ°Π½Π΅ Π½Π΅Ρ
* [com.google.android.material.appbar.AppBarLayout], ΠΌΠΎΠΆΠ½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ edge-to-edge.
*
* ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΏΠΎΠ΄ statusBar, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, [R.color.windowBackground]
*
* @see contentUnderNavBarCustomColor
*/
@ColorRes
var contentUnderStatusBarCustomColor: Int? = null
/**
* ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ navigationBar Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅Ρ
* ΠΈΠ»ΠΈ [BottomNavigationMenu], ΠΌΠΎΠΆΠ½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ edge-to-edge.
*
* ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΏΠΎΠ΄ navigationBar, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, [R.color.bottomMenu]
*
* @see contentUnderStatusBarCustomColor
*/
@ColorRes
var contentUnderNavBarCustomColor: Int? = null
/**
* ΠΡΠ»ΠΈ ΠΏΠΎΠ΄ statusBar ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π΅ ΡΠΏΠ»ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°,
* ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ.
*
* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ [Color.TRANSPARENT]
*
* @see navBarEdgeToEdgeColor
*/
@ColorInt
var statusBarEdgeToEdgeColor = Color.TRANSPARENT
/**
* ΠΡΠ»ΠΈ ΠΏΠΎΠ΄ navigationBar ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π΅ ΡΠΏΠ»ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°,
* ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΠΎΡΡΠΈ.
*
* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ [Color.TRANSPARENT]
*
* @see statusBarEdgeToEdgeColor
*/
@ColorInt
var navBarEdgeToEdgeColor = Color.TRANSPARENT
/**
* Π¦Π²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ Π΄Π»Ρ statusBar ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ 23 API. ΠΠ»Ρ Android Ρ API Π½ΠΈΠΆΠ΅ 23
* ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Ρ
ΠΎΡΠΎΡΠΎ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π±Π΅Π»ΡΠΌΠΈ ΠΈΠΊΠΎΠ½ΠΊΠ°ΠΌΠΈ.
*
* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄Π»Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠ° edge-to-edge, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ Ρ 50% ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡΡ.
*
* @see navBarCompatibilityColor
*/
@ColorInt
var statusBarCompatibilityColor = ColorUtils.setAlphaComponent(Color.BLACK, 128)
/**
* Π¦Π²Π΅Ρ ΠΈΠΊΠΎΠ½ΠΎΠΊ Π΄Π»Ρ navigationBar ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ 26 API. ΠΠ»Ρ Android Ρ API Π½ΠΈΠΆΠ΅ 26
* ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Ρ
ΠΎΡΠΎΡΠΎ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π±Π΅Π»ΡΠΌΠΈ ΠΈΠΊΠΎΠ½ΠΊΠ°ΠΌΠΈ.
*
* ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄Π»Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠ° edge-to-edge, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ Ρ 50% ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡΡ.
*
* @see statusBarCompatibilityColor
*/
@ColorInt
var navBarCompatibilityColor = ColorUtils.setAlphaComponent(Color.BLACK, 128)
}
Π£ΡΠΈΠ»ΠΈΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.4.10") // Kotlin
implementation("com.google.android.material:material:1.2.1") // Material components
ΠΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ issue.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.