Add RecyclerView dividers

Add divider decorations to the RecyclerView
This commit is contained in:
OxygenCobalt 2020-08-25 18:03:58 -06:00
parent a6e8007972
commit 89398d9f4e
6 changed files with 45 additions and 8 deletions

View file

@ -3,7 +3,6 @@ package org.oxycblt.auxio
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@ -11,7 +10,7 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) // AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
Log.d(this::class.simpleName, "Activity Created.") Log.d(this::class.simpleName, "Activity Created.")
} }

View file

@ -12,6 +12,7 @@ import androidx.lifecycle.ViewModelProvider
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentLibraryBinding import org.oxycblt.auxio.databinding.FragmentLibraryBinding
import org.oxycblt.auxio.library.recycler.AlbumDataAdapter import org.oxycblt.auxio.library.recycler.AlbumDataAdapter
import org.oxycblt.auxio.recycler.applyDivider
class LibraryFragment : Fragment() { class LibraryFragment : Fragment() {
@ -30,6 +31,7 @@ class LibraryFragment : Fragment() {
val adapter = AlbumDataAdapter() val adapter = AlbumDataAdapter()
binding.libraryRecycler.adapter = adapter binding.libraryRecycler.adapter = adapter
binding.libraryRecycler.applyDivider()
libraryModel.albums.observe( libraryModel.albums.observe(
viewLifecycleOwner, viewLifecycleOwner,

View file

@ -15,7 +15,7 @@ class AlbumViewHolder(
if (album.cover == null) { if (album.cover == null) {
// If there is no cover, clear the ImageView so that the previous // If there is no cover, clear the ImageView so that the previous
// View's cover doesnt stick around. // View's cover doesn't stick around.
binding.cover.setImageResource(android.R.color.transparent) binding.cover.setImageResource(android.R.color.transparent)
} else { } else {
binding.cover.setImageBitmap(album.cover) binding.cover.setImageBitmap(album.cover)

View file

@ -1,7 +1,13 @@
package org.oxycblt.auxio.recycler package org.oxycblt.auxio.recycler
import android.graphics.drawable.ColorDrawable
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat
import androidx.core.graphics.ColorUtils
import androidx.databinding.BindingAdapter import androidx.databinding.BindingAdapter
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.RecyclerView
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.music.models.Album import org.oxycblt.auxio.music.models.Album
@ -13,3 +19,31 @@ fun TextView.numSongsToText(album: Album) {
context.getString(R.string.format_multi_song_count, album.numSongs.toString()) context.getString(R.string.format_multi_song_count, album.numSongs.toString())
} }
} }
// Apply a custom vertical divider
fun RecyclerView.applyDivider() {
val div = DividerItemDecoration(
context,
DividerItemDecoration.VERTICAL
)
div.setDrawable(
ColorDrawable(
getDividerColor(this)
)
)
addItemDecoration(div)
}
private fun getDividerColor(recycler: RecyclerView): Int {
val isDark = AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES
// Depending on the theme use a different opacity for the divider
val alpha = if (isDark) 45 else 85
return ColorUtils.setAlphaComponent(
ContextCompat.getColor(recycler.context, R.color.blue),
alpha
)
}

View file

@ -13,12 +13,12 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/padding_small"> android:padding="@dimen/padding_medium">
<ImageView <ImageView
android:id="@+id/cover" android:id="@+id/cover"
android:layout_width="@dimen/cover_size" android:layout_width="@dimen/cover_size_compact"
android:layout_height="@dimen/cover_size" android:layout_height="@dimen/cover_size_compact"
android:contentDescription="@{@string/description_cover_art + album.title}" android:contentDescription="@{@string/description_cover_art + album.title}"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -32,7 +32,7 @@
android:id="@+id/album_name" android:id="@+id/album_name"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_small" android:layout_marginStart="@dimen/margin_medium"
android:text="@{album.title}" android:text="@{album.title}"
android:textAppearance="?android:attr/textAppearanceListItem" android:textAppearance="?android:attr/textAppearanceListItem"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
@ -46,7 +46,7 @@
android:id="@+id/song_count" android:id="@+id/song_count"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_small" android:layout_marginStart="@dimen/margin_medium"
android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"

View file

@ -2,8 +2,10 @@
<resources> <resources>
<dimen name="padding_tiny">4dp</dimen> <dimen name="padding_tiny">4dp</dimen>
<dimen name="padding_small">8dp</dimen> <dimen name="padding_small">8dp</dimen>
<dimen name="padding_medium">16dp</dimen>
<dimen name="margin_small">8dp</dimen> <dimen name="margin_small">8dp</dimen>
<dimen name="margin_medium">16dp</dimen>
<dimen name="cover_size">64dp</dimen> <dimen name="cover_size">64dp</dimen>
<dimen name="cover_size_compact">42dp</dimen> <dimen name="cover_size_compact">42dp</dimen>