Skip to content

Commit

Permalink
Support for NavigationRailView
Browse files Browse the repository at this point in the history
  • Loading branch information
DeweyReed committed Jul 4, 2021
1 parent a1c4e43 commit f8c42f3
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 3 deletions.
6 changes: 6 additions & 0 deletions app/src/main/res/layout/fragment_app_bar.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@

</com.google.android.material.tabs.TabLayout>

<com.google.android.material.navigationrail.NavigationRailView
android:layout_width="wrap_content"
android:layout_height="500dp"
app:headerLayout="@layout/view_navigation_rail_header"
app:menu="@menu/bottom_app_bar_menu" />

</LinearLayout>

</ScrollView>
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/layout/view_navigation_rail_header.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.floatingactionbutton.FloatingActionButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_day" />
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import com.google.android.material.floatingactionbutton.ExtendedFloatingActionBu
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.imageview.ShapeableImageView
import com.google.android.material.navigation.NavigationView
import com.google.android.material.navigationrail.NavigationRailView
import com.google.android.material.progressindicator.CircularProgressIndicator
import com.google.android.material.progressindicator.LinearProgressIndicator
import com.google.android.material.radiobutton.MaterialRadioButton
Expand Down Expand Up @@ -59,6 +60,7 @@ import xyz.aprildown.theme.tint.ImageViewTint
import xyz.aprildown.theme.tint.LinearProgressIndicatorTint
import xyz.aprildown.theme.tint.ListViewTint
import xyz.aprildown.theme.tint.MaterialCardViewTint
import xyz.aprildown.theme.tint.NavigationRailViewTint
import xyz.aprildown.theme.tint.NavigationViewTint
import xyz.aprildown.theme.tint.ProgressBarTint
import xyz.aprildown.theme.tint.RadioButtonTint
Expand Down Expand Up @@ -120,6 +122,7 @@ abstract class ThemeInflationDelegate {
is CollapsingToolbarLayout -> view.decorate(attrs, CollapsingToolbarLayoutTint())
is BottomAppBar -> view.decorate(attrs, BottomAppBarTint())
is BottomNavigationView -> view.decorate(attrs, BottomNavigationViewTint())
is NavigationRailView -> view.decorate(attrs, NavigationRailViewTint())
is Chip -> view.decorate(attrs, ChipTint())
is ExtendedFloatingActionButton -> view.decorate(
attrs,
Expand Down
4 changes: 4 additions & 0 deletions theme/src/main/java/xyz/aprildown/theme/ThemeViewInflater.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import com.google.android.material.floatingactionbutton.ExtendedFloatingActionBu
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.imageview.ShapeableImageView
import com.google.android.material.navigation.NavigationView
import com.google.android.material.navigationrail.NavigationRailView
import com.google.android.material.progressindicator.CircularProgressIndicator
import com.google.android.material.progressindicator.LinearProgressIndicator
import com.google.android.material.slider.RangeSlider
Expand Down Expand Up @@ -61,6 +62,7 @@ import xyz.aprildown.theme.tint.ImageViewTint
import xyz.aprildown.theme.tint.LinearProgressIndicatorTint
import xyz.aprildown.theme.tint.ListViewTint
import xyz.aprildown.theme.tint.MaterialCardViewTint
import xyz.aprildown.theme.tint.NavigationRailViewTint
import xyz.aprildown.theme.tint.NavigationViewTint
import xyz.aprildown.theme.tint.ProgressBarTint
import xyz.aprildown.theme.tint.RadioButtonTint
Expand Down Expand Up @@ -203,6 +205,8 @@ open class ThemeViewInflater : MaterialComponentsViewInflater() {
BottomAppBar(context, attrs).decorate(attrs, BottomAppBarTint())
"com.google.android.material.bottomnavigation.BottomNavigationView" ->
BottomNavigationView(context, attrs).decorate(attrs, BottomNavigationViewTint())
"com.google.android.material.navigationrail.NavigationRailView" ->
NavigationRailView(context, attrs).decorate(attrs, NavigationRailViewTint())
"com.google.android.material.chip.Chip" ->
Chip(context, attrs).decorate(attrs, ChipTint())
"com.google.android.material.floatingactionbutton.FloatingActionButton" ->
Expand Down
55 changes: 52 additions & 3 deletions theme/src/main/java/xyz/aprildown/theme/tint/BottomAppBarTints.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ package xyz.aprildown.theme.tint

import android.content.Context
import android.content.res.ColorStateList
import android.graphics.drawable.ColorDrawable
import androidx.core.view.ViewCompat
import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.navigation.NavigationBarView
import com.google.android.material.navigationrail.NavigationRailView
import xyz.aprildown.theme.R
import xyz.aprildown.theme.Theme
import xyz.aprildown.theme.utils.adjustAlpha
Expand Down Expand Up @@ -95,7 +98,7 @@ internal class BottomNavigationViewTint : BaseTint<BottomNavigationView>(
}
)

private fun BottomNavigationView.withItemIconTint(resourceId: Int) {
private fun NavigationBarView.withItemIconTint(resourceId: Int) {
when (resourceId) {
R.color.mtrl_navigation_bar_item_tint -> {
itemIconTintList = mtrl_navigation_bar_item_tint(context)
Expand Down Expand Up @@ -136,7 +139,7 @@ private fun mtrl_navigation_bar_colored_item_tint(): ColorStateList {
)
}

private fun BottomNavigationView.withItemTextTint(resourceId: Int) {
private fun NavigationBarView.withItemTextTint(resourceId: Int) {
when (resourceId) {
R.color.mtrl_navigation_bar_item_tint -> {
itemTextColor = mtrl_navigation_bar_item_tint(context)
Expand All @@ -147,7 +150,7 @@ private fun BottomNavigationView.withItemTextTint(resourceId: Int) {
}
}

private fun BottomNavigationView.withItemRippleTint(resourceId: Int) {
private fun NavigationBarView.withItemRippleTint(resourceId: Int) {
when (resourceId) {
R.color.mtrl_navigation_bar_ripple_color -> {
itemRippleColor = mtrl_navigation_bar_ripple_color(context)
Expand Down Expand Up @@ -216,3 +219,49 @@ private fun mtrl_navigation_bar_colored_ripple_color(): ColorStateList {
)
)
}

/**
* https://github.com/material-components/material-components-android/blob/master/docs/components/NavigationRail.md
* [R.style.Widget_MaterialComponents_NavigationRailView]
* [R.style.Widget_MaterialComponents_NavigationRailView_Colored]
*/
internal class NavigationRailViewTint : BaseTint<NavigationRailView>(
attrs = R.styleable.Theme_NavigationRailView,
defStyleAttr = R.attr.navigationRailStyle,
onTint = {
val nav = view
matchThemeColor(R.styleable.Theme_NavigationRailView_android_background)?.let {
ViewCompat.setBackgroundTintList(nav, it.toColorStateList())
}
matchThemeColor(R.styleable.Theme_NavigationRailView_itemBackground)?.let {
nav.itemBackground = ColorDrawable(it)
}
withColorOrResourceId(
R.styleable.Theme_NavigationRailView_itemRippleColor,
applySolidColor = {
nav.itemRippleColor = it.toColorStateList()
},
applyResource = {
nav.withItemRippleTint(it)
}
)
withColorOrResourceId(
R.styleable.Theme_NavigationRailView_itemIconTint,
applySolidColor = {
nav.itemIconTintList = it.toColorStateList()
},
applyResource = {
nav.withItemIconTint(it)
}
)
withColorOrResourceId(
R.styleable.Theme_NavigationRailView_itemTextColor,
applySolidColor = {
nav.itemTextColor = it.toColorStateList()
},
applyResource = {
nav.withItemTextTint(it)
}
)
}
)
8 changes: 8 additions & 0 deletions theme/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -183,4 +183,12 @@
<attr name="trackColor" />
</declare-styleable>

<declare-styleable name="Theme_NavigationRailView">
<attr name="android:background" />
<attr name="itemBackground" />
<attr name="itemRippleColor" />
<attr name="itemIconTint" />
<attr name="itemTextColor" />
</declare-styleable>

</resources>

0 comments on commit f8c42f3

Please sign in to comment.