Estoy tratando de encontrar una manera en Kotlin para detectar el nivel de zoom de visualización que un usuario ha configurado en su dispositivo. Actualmente tengo dos botones de imagen con etiquetas a un lado sentados uno al lado del otro en un LinearLayout. Las etiquetas se ajustan a la mitad de la palabra si el zoom de la pantalla se establece más allá de un cierto umbral. Lo que me gustaría hacer es detectar el nivel de zoom (o como se llame) y apilarlos verticalmente si el texto supera cierto tamaño para que los usuarios con una vista menos que ideal puedan leerlos correctamente. ¿Es esto posible en Kotlin?
DisplayMetrics.DENSITY_DEVICE_STABLE existe específicamente para este propósito. Compare eso con su densidad Dpi actual.
Le sugiero que use un FlexboxLayout que haga lo que desea lograr aquí.
Sin embargo, si insiste en usar un LinearLayout e invierte su dirección dependiendo del clima que su texto encaje allí o no, puede usar un BoringLayout que lo ayuda a calcular el ancho requerido para dibujar un texto determinado, por ejemplo, el siguiente código indica cuánto espacio requiere SomeText para ser dibujado usando una pintura con textSize=20 SP . Entonces, dependiendo de este valor, puede decidir cómo establecer la orientación de su LinearLayout
val paint = TextPaint().apply { textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, context.resources.displayMetrics) } BoringLayout.getDesiredWidth("SomeText", paint)Pude encontrar los valores que necesitaba en el espacio de nombres de configuration . Hay dos configuraciones de usuario que afectan el diseño, Escala de fuente y Zoom de pantalla, las cuales se pueden configurar de forma independiente entre sí.
val config = resources.configuration val fontScale = config.fontScale val screenWidth = config.screenWidthDp