Agregar valor en coma flotante a recursos / valores de Android

Estoy tratando de agregar un poco de espacio entre líneas a mis TextViews usando android:lineSpacingMultiplier de la documentación :

Espaciado adicional entre líneas de texto, como un multiplicador.

Debe ser un valor de coma flotante, como “1.2”.

Como estoy usando esto en algunos TextViews diferentes, me gustaría agregar una dimensión / valor global a mis recursos, pero no sé qué etiqueta usar, si es que existe. He intentado todos los tipos de recursos que tienen sentido para mí, pero ninguno de ellos funciona.

Lo que me gustaría tener sería algo como esto:

  1.4  

Editar: conozco android:lineSpacingExtra (que necesita una dimensión con una unidad adjunta), pero me gustaría utilizar android:lineSpacingMultiplier si es posible.

Hay una solucion:

  1.0  

De esta forma, su número flotante estará bajo @dimen. Tenga en cuenta que puede usar otros modificadores de “formato” y / o “tipo”, donde el formato significa:

Formato = tipo de datos adjuntos:

  • flotador
  • booleano
  • fracción
  • entero

y tipo significa:

Tipo = tipo de recurso (referenciado con R.XXXXX.nombre):

  • color
  • dimente
  • cuerda
  • estilo
  • etc …

Para buscar recursos del código, debe usar este fragmento:

 TypedValue outValue = new TypedValue(); getResources().getValue(R.dimen.text_line_spacing, outValue, true); float value = outValue.getFloat(); 

Sé que esto es confuso (esperarías llamar a getResources().getDimension(R.dimen.text_line_spacing) ), pero las dimensions Android tienen un tratamiento especial y el número de “flotante” puro no es una dimensión válida.


Además, hay un pequeño “truco” para poner el número de flotación en la dimensión, pero SE ADVERTIMOS de que esto es realmente pirateo , y está arriesgándose a perder el rango de flote y la precisión.

  2.025px  

y del código, puedes obtener ese flotador

 float lineSpacing = getResources().getDimension(R.dimen.text_line_spacing); 

en este caso, el valor de lineSpacing es 2.024993896484375 , y no 2.025 como era de esperar.

Como se describe en este enlace http://droidista.blogspot.in/2012/04/adding-float-value-to-your-resources.html

Declarar en dimen.xml

 9.52 

Hacer referencia desde xml

 @dimen/my_float_value 

Hacer referencia desde Java

 TypedValue typedValue = new TypedValue(); getResources().getValue(R.dimen.my_float_value, typedValue, true); float myFloatValue = typedValue.getFloat(); 

Todas las soluciones sugieren que use el valor de flotación predefinido a través del código.

Pero en caso de que se pregunte cómo hacer referencia al valor de flotación predefinido en XML (por ejemplo, diseños), a continuación se muestra un ejemplo de lo que hice y está funcionando perfectamente:

Defina valores de recursos como type="integer" pero format="float" , por ejemplo:

 6.0 1.5 4.5 

Y luego úselas en su diseño usando @integer/name_of_resource , por ejemplo:

         

También encontré una solución que parece funcionar bien sin advertencias:

  255% 15%  

Entonces:

 // theName = 2.55f float theName = getResources().getFraction(R.dimen.the_name, 1, 1); // anotherName = 0.15f float anotherName = getResources().getFraction(R.dimen.another_name, 1, 1); 

Advertencia : solo funciona cuando usa el dimen del código de Java no de xml

Usé un estilo para resolver este problema. El enlace oficial está aquí .

Bastante útil. Crea un archivo para contener sus estilos (como “styles.xml”) y los define dentro de él. A continuación, hace referencia a los estilos en su diseño (como “main.xml”).

Aquí hay un estilo de muestra que hace lo que quiere:

  

Digamos que quiere alterar un simple TextView con esto. En tu archivo de diseño escribirías:

  

Pruébalo: básicamente, así es como se hace toda la interfaz de usuario integrada en el Android. Y al usar estilos, tiene la opción de modificar todo tipo de otros aspectos de sus Vistas también.

También podemos usarlo para la pauta del diseño de restricciones.

Crea un archivo integer.xml y agrégalo a

  0.60 

Usar desde un archivo layout.xml

  app:layout_constraintGuide_percent="@integer/guideline_button_top" 

Si tiene flotadores simples que controla el rango de, también puede tener un número entero en los recursos y dividir por el número de decimales que necesita directamente en el código.

Entonces algo como esto

 356 

se usa con 2 decimales

 this.strokeWidthFromResources = resources_.getInteger(R.integer.strokeWidth); circleOptions.strokeWidth((float) strokeWidthFromResources/ 100); 

y eso lo convierte en 3.56f

No dice que esta es la solución más elegante, pero para proyectos simples, es conveniente.

Encontré una solución que funciona pero da como resultado una Warning ( WARN/Resources(268): Converting to float: TypedValue{t=0x3/d=0x4d "1.2" a=2 r=0x7f06000a} ) en LogCat.

  1.2