The Android Arsenal – Vistas

Un FragmentDialog implementado con RecyclerView que puede aceptar selecciones únicas o múltiples

Instalación

RecyclerPickerDialog se distribuye a través de Maven Central, Jcenter y Jitpack.

implementation 'com.github.guilhe:recycler-picker-dialog:${LATEST_VERSION}'

Uso

Tipos de selección

enum class SelectionType { SINGLE, MULTIPLE }

Tipos de selector

enum class SelectorType { CHECK_BOX, RADIO_BUTTON, SWITCH }

Campos personalizados (y valores predeterminados)

var title = ""
var showSearchBar = false
var inputHint = ""
var buttonText: String = "Ok"
var resetValuesOnShow = true
var dismissKeyboardOnSelection = true
var dismissOnSelection = false
var isChoiceMandatory = false
var data: ArrayList<Item> = arrayListOf()
@AnimRes var itemsLayoutAnimator: Int? = null
var dialogHeight: Int = ViewGroup.LayoutParams.MATCH_PARENT
var lifecycleOwner: LifecycleOwner? = null

Evita pérdidas de memoria

Simplemente agregue la siguiente línea para evitar pérdidas de memoria si no se eliminan antes de que se destruya la actividad o el fragmento:

picker.newInstance(/* setup... */).apply { lifecycleOwner = this@MainActivity }

Temas

Para anular el tema predeterminado, cree el suyo propio simplemente extendiéndolo y reemplazando los valores de color deseados:

<style name="DialogA" parent="RecyclerPickerDialogTheme">
    <item name="colorPrimary">@color/red</item>
    <item name="recyclerPickerDialogCornerRadius">20dp</item>
</style>

Atributos

Puede reemplazar los siguientes atributos:

<resources>
    <style name="RecyclerPickerDialogTheme" parent="Theme.MaterialComponents.Light.Dialog">
        <item name="colorPrimary"/>
        <item name="colorOnPrimary"/>
        <item name="colorSecondary"/>
     
        <item name="android:textColorPrimary"/>
        <item name="android:textColorSecondary"/>

        <item name="colorAccent"/>
        <item name="android:colorEdgeEffect"/>
        <item name="recyclerPickerDialogCornerRadius"/>
    </style>
</resources>

Dónde está:

  • colorPrimary > Color de fondo del título y el botón
  • colorOnPrimary > Título y color del texto del botón
  • colorSecondary > Color de fondo del cuadro de diálogo y la línea
  • colorEdgeEffect > Color del borde de RecyclerView
  • textColorPrimary > Buscar y color de texto de línea
  • textColorSecondary > Sugerencia de búsqueda y color del icono; Color de líneas horizontales
  • colorSurface > CheckBox, RadioButton y Color Switch deseleccionados
  • colorOnSurface > Fondo del botón cuando está deshabilitado (Nota sustituir colorSurface)
  • colorAccent > CheckBox, RadioButton y Switch comprobaron el color; Sugerencia de color del cursor
  • recicladorPickerDialogCornerRadius > Radio de las esquinas del diálogo

Creando una nueva instancia:

val picker = 
    RecyclerPickerDialogFragment
        .newInstance(
            type = SelectionType.SINGLE, //default
            selector = SelectorType.CHECK_BOX, //default
            theme = R.style.RecyclerPickerDialogTheme, //default
            onItemsPicked = { selected -> /* selected items or empty */ }
        )
        .apply {
            /* configure custom fields */ 
        }

Muéstralo cuando quieras:

picker.show(supportFragmentManager, "MyPickerDialogFragment")

Prueba el archivo aplicación de muestra para verlo funcionar!

Adicciones

Errores y comentarios

Para errores, preguntas y discusiones, utilice los problemas de GitHub.

LICENCIA

Copyright (c) 2020 – presente GuilhE

Con licencia de Apache License, Versión 2.0 (la “Licencia”); no puede utilizar este archivo excepto de acuerdo con la licencia. Puede obtener una copia de la licencia en

http://www.apache.org/licenses/LICENSE-2.0

A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye “TAL CUAL”, SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sea expresa o implícita. Consulte la Licencia para conocer el idioma específico que rige los permisos y restricciones de la Licencia.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *