Usar recursos vectoriales en Android con Kotlin


Para usar gráficos vectoriales en las apps es necesario añadir la compatibilidad para usar recursos vectoriales, documentación oficial ( Aggregar gráficos vectoriales de varias densidades)

Configurando un proyecto para usar VectorDrawableCompat

Antes de usar imágenes vectoriales, se debe agregar la directiva en el archivo build.gradle:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  implementation 'androidx.appcompat:appcompat:1.0.2'

}

Establecer gráfico vectorial en un componente

Use app:srcCompat para establecer el recurso gráfico, se debe agregar xmlns:app=”http://schemas.android.com/apk/res-auto»

Fuentes:
Vector drawable is the best practices for Android development | Kotlin
AppCompat — Age of the vectors

Anuncio publicitario

Crear una app en Kotlin: analizador de batería – parte 2


Recientemente he modificado parte del código de la app, el cambio efectuado es que los valores que se obtiene de la batería se almacenen en un objeto con su propiedades parseadas

Objeto BatteryInfo.kt

import android.os.BatteryManager

class BatteryInfo {
    var level: Float? = null
    var status: Int? = null
    var chargePlug: Int? = null
    var health: Int? = null

    var voltage: Float = 0.0F
        get() {
            return if (field > 1000) {
                field / 1000f
            } else {
                field
            }
        }
    var temperature: Int = 0
    var technology: String? = "unknown"

    val isPlugged: Boolean
        get() {
            return chargePlug == BatteryManager.BATTERY_PLUGGED_USB
                    || status == BatteryManager.BATTERY_PLUGGED_AC
                    || status == BatteryManager.BATTERY_PLUGGED_WIRELESS
        }

    override fun toString(): String {
        return "BatteryInfo(level=$level, status=$status, chargePlug=$chargePlug, health=$health, batteryVoltage=$voltage, batteryTemperature=$temperature, batteryTechnology='$technology')"
    }

}

Al obtener los datos de la batería, se deben añadir al objeto de tipo BatteryInfo

val level: Int = intent!!.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
val batteryPct: Float = level / scale.toFloat()

val batteryInfo: BatteryInfo = BatteryInfo()
batteryInfo.status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)
batteryInfo.level = batteryPct
batteryInfo.chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
batteryInfo.health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN)
batteryInfo.voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1).toFloat()
batteryInfo.temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1)
batteryInfo.technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY)

Log.d(TAG, "batteryInfo $batteryInfo")

Cómo soportar la relación de aspecto 18:9 en aplicaciones de Android


Des de el 2016 los fabricantes de Android empezaron a sacar dispositivos más alargados, dejando el 16:9 al pasado. Por eso es necesario adaptar que las apps se puedan visualizar a pantalla completa y ofrecer la máxima experiencia en diferentes ratios de pantalla.

La recomendación de Google es diseñar las aplicaciones para que admiten relación de aspecto de 2.1 o superior.

Directiva para soportar pantallas de 2.1 o superior

En el archivo AndroidManifest.xml de la app añadir dentro del bloque de application

<application>
   ...
   <meta-data android:name="android.max_aspect" android:value="2.1" />
   ...
</application>

Más información

Información extraída del Blog oficial de Google (Android Developers Blog) – Update your app to take advantage of the larger aspect ratio on new Android flagship devices

Plugin Material design UI para Android Studio


Material Theme UI es un complemento para JetBrains IDE (IntelliJ IDEA, WebStorm, Android Studio, etc.) que cambia la apariencia original a una apariencia de Material Design.

Inspirado con el tema Material Design, transforma el Android Studio para que se vea moderno y funcional, permite un montón de personalizaciones de color y formas.

Además de su impresionante paleta de temas, también ofrece:

  • Temas claro y oscuros que transforman por completo el IDE Android Studio
  • Remplazar iconos de la UI a iconos coloridos de Material Design
  • Personalización de los controles y componentes del ID
  • Poder escoger un color dominante (Accent color) para todos los componentes seleccionables.
  • Modificación de la fuente, sangría, estilos de fecha etc..

Instalación de Material Design UI

Solo es necesario ir a menú settings, buscar sección plugins y buscar Material Design UI en el cuadro de texto y instalar.
Nos pedirá reiniciar el Android studio y se mostrará su pre-configuración.

Instalar Plugin Material Design UI para Android Studio
Instalación Material Design UI plugin Android Studio

Luego una vez instalado en el menú settings – Apperance & Behavior tendremos dos secciones nuevas:

La sección Material Custom Theme es donde se podrá cambiar los colores del tema actual

Sección Material Custom Theme

Y la sección Material Theme, todo relacionado con la modificación del ide mediante estilo Material Design

Sección Material Theme

Obtener el nivel de batería de Android con Kotlin


El SDK de Android permite obtener información de la batería del dispositivo con Kotlin se hace de la siguiente manera

Para obtener el nivel de batería se debe usar las clases IntentFilter, Intent y BateryManager.

fun getBatteryPercentage(context: Context): Int {
    val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
        context.registerReceiver(null, ifilter)
    }
    val level = batteryStatus?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) ?: -1
    val scale = batteryStatus?.getIntExtra(BatteryManager.EXTRA_SCALE, -1) ?: -1

    val batteryPct = level / scale.toFloat()

    return (batteryPct * 100).toInt()
}

Función getBatteryPercentage()

El nivel de batería se obtiene de los valores level y scale, dividiendo (level / scale) se obtiene el nivel de la batería, luego se debe multiplicar por 100 para obtener el porcentaje de 0 a 100.

Su uso

Su implementación es solo necesario pasar el contexto a la función y nos devolverá un entero con el porcentaje de la batería

batteryLevel : Int = getBatteryPercentage(MainActivity@this)