Country Picker Android Library ✨🚀
Librería 100% Jetpack Compose, modular, ligera y profesional para seleccionar país, código telefónico y moneda.
Compatible con múltiples idiomas, animaciones, búsqueda fluida y Clean Architecture 2025.
- Lista completa de países (+195) con bandera, código, moneda y teléfono.
- Selectores visuales para país, moneda y código telefónico.
- Soporte para múltiples idiomas (
en
,es
,pt
,fr
,it
,de
,zh
,ar
,hi
). - Auto-scroll al ítem seleccionado.
- Búsqueda con teclado (
IMEAction.Done
para cerrar). - Fallback a inglés si el idioma no está soportado.
- Consumo flexible vía
CountryProvider
.
// settings.gradle.kts
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
# libs.versions.toml
[libraries]
amorada-countrypicker = { group = "com.github.AmoradaCorp", name = "AmoradaCountryPicker", version = "v1.6.0" }
// build.gradle.kts
implementation(libs.amorada.countrypicker)
val countryProvider = AssetCountryProvider(context) // detecta idioma automáticamente
//Si deseas un idioma en especifico
val countryProvider = AssetCountryProvider(context, languageCode = "fr") // francés
CountryPickerDropdown(
selectedCountryCode = state.countryCode,
onCountrySelected = {
state = state.copy(
countryCode = it.countryCode,
countryName = it.countryName
)
},
countryProvider = countryProvider,
modifier = Modifier.fillMaxWidth()
)
CurrencyPickerDropdown(
selectedCurrencyCode = state.currencyCode,
onCurrencySelected = {
state = state.copy(
currencyCode = it.currencyCode,
currencyName = it.currencyName.orEmpty()
)
},
countryProvider = countryProvider,
modifier = Modifier.fillMaxWidth()
)
PhoneCodePickerDropdown(
selectedPhoneCode = state.phoneCode,
onPhoneCodeSelected = {
state = state.copy(phoneCode = it.phoneCode)
},
countryProvider = countryProvider,
modifier = Modifier.fillMaxWidth()
)
Esta librería soporta automáticamente los siguientes idiomas (si están disponibles en assets):
Código ISO Idioma en Inglés es Español pt Portugués fr Francés de Alemán it Italiano zh Chino ar Árabe hi Hindi
Si el idioma no se encuentra, se usa countries_en.json como fallback seguro.
📝 ¿Qué es CountryProvider?
interface CountryProvider {
fun getCountries(): List<Country>
}
La librería no accede a Context ni carga datos por sí sola. La responsabilidad es del consumidor.
Ejemplo:
class AssetCountryProvider(
private val context: Context,
private val languageCode: String? = null
) : CountryProvider { ... }
Puedes acceder a la data para construir tu propio selector:
val countries = countryProvider.getCountries()
val list = countries.map {
"${it.emoji.orEmpty()} ${it.countryCode} - ${it.countryName}"
}
Acceso a moneda o teléfono:
val phoneList = countries.map { "${it.emoji.orEmpty()} ${it.phoneCode}" }
val currencyList = countries.map { "${it.emoji.orEmpty()} ${it.currencyCode} - ${it.currencyName}" }
Para todos los componentes expuestos (CountryPickerDropdown
, CurrencyPickerDropdown
, PhoneCodePickerDropdown
) se recomienda:
modifier = Modifier.fillMaxWidth()
Puedes ajustarlo según tu diseño (padding
, weight
, etc). Todos los componentes son flexibles.
Este repositorio es público y puedes hacer fork para tu propio uso.
Sin embargo, las contribuciones directas no están habilitadas en este momento para mantener control sobre la evolución de la librería.
Si deseas sugerir mejoras, puedes abrir un Issue
.
Este proyecto está licenciado bajo la licencia MIT - ver LICENSE para más detalles.