representación que punto operaciones online números norma mantisa informatica flotante fijo exponente enteros ejemplos con coma android resources floating-point

android - punto - que es coma flotante en informatica



Añadir valor de punto flotante a los recursos/valores de Android (8)

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

Declarar en dimen.xml

<item name="my_float_value" type="dimen" format="float">9.52</item>

Referencia desde xml

@dimen/my_float_value

Referencia de java

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

Estoy tratando de agregar un poco de espacio entre líneas a mis vistas de texto usando android:lineSpacingMultiplier de la documentation :

Espaciado extra entre líneas de texto, como multiplicador.

Debe ser un valor de punto flotante, como "1.2".

Como lo estoy usando en unas vistas de texto diferentes, me gustaría agregar una dimensión / valor global a mis recursos, pero no sé qué etiqueta usar, si 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:

<resources> <dimen name="text_line_spacing">1.4</dimen> </resources>

Edición: Soy consciente de android:lineSpacingExtra (que necesita una dimensión con una unidad adjunta), pero me gustaría usar android:lineSpacingMultiplier si es posible.


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.

<resources> <string name="text_line_spacing">1.2</string> </resources> <android:lineSpacingMultiplier="@string/text_line_spacing"/>


Hay una solucion:

<resources> <item name="text_line_spacing" format="float" type="dimen">1.0</item> </resources>

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

Formato = adjuntando tipo de datos:

  • flotador
  • booleano
  • fracción
  • entero
  • ...

y el tipo significa:

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

  • color
  • atenuar
  • cuerda
  • estilo
  • etc ...

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

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 como getResources().getDimension(R.dimen.text_line_spacing) ), pero las dimensions Android tienen un tratamiento especial y el número puro "flotante" no es una dimensión válida.

Además, hay un pequeño "truco" para poner el número de coma flotante en la dimensión, pero tenga la AVISO de que esto es realmente pirata , y corre el riesgo de perder el rango y la precisión de la flotación.

<resources> <dimen name="text_line_spacing">2.025px</dimen> </resources>

y desde el código, puedes conseguir 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 se esperaría.


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

Así que algo como esto

<integer name="strokeWidth">356</integer>

se usa con 2 decimales

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

y eso lo hace 3.56f

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


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

<resources> <item name="the_name" type="dimen">255%</item> <item name="another_name" type="dimen">15%</item> </resources>

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 se usa el dimen del código Java no del xml


También podemos usarlo para la guía del diseño de restricciones.

Cree el archivo integer.xml y agregue en

<item name="guideline_button_top" type="integer" format="float">0.60</item>

Usar desde un archivo layout.xml

app:layout_constraintGuide_percent="@integer/guideline_button_top"


Todas las soluciones sugieren que utilice el valor flotante predefinido a través del código.

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

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

<item name="windowWeightSum" type="integer" format="float">6.0</item> <item name="windowNavPaneSum" type="integer" format="float">1.5</item> <item name="windowContentPaneSum" type="integer" format="float">4.5</item>

Y luego, utilícelos en su diseño utilizando @integer/name_of_resource , por ejemplo:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="@integer/windowWeightSum" // float 6.0 android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="@integer/windowNavPaneSum" // float 1.5 android:orientation="vertical"> <!-- other views --> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="@integer/windowContentPaneSum" // float 4.5 android:orientation="vertical"> <!-- other views --> </LinearLayout> </LinearLayout>


Utilicé un estilo para resolver este problema. El enlace oficial está here .

Cosas bastante útiles. Crea un archivo para guardar sus estilos (como "styles.xml") y defínalos dentro de él. Luego hace referencia a los estilos en su diseño (como "main.xml").

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

<style name="text_line_spacing"> <item name="android:lineSpacingMultiplier">1.4</item> </style>

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

<TextView style="@style/summary_text" ... android:text="This sentence has 1.4 times more spacing than normal." />

Inténtelo. Esta es esencialmente la forma en que se realiza toda la IU incorporada en el Android. Y al usar estilos, también tiene la opción de modificar todo tipo de otros aspectos de sus Vistas.