2011-12-13 20 views
11

Actualmente estoy programando una aplicación para Android. Ahí estoy atascado con xml-layout. ¿Es posible asignar un valor a una etiqueta xml usando una variable (constante) definida en una clase?android: asignando un valor constante a un elemento xml

Tengo una clase llamada Constants.java para todas las constantes de mi programa. Lo hago para una mejor capacidad de mantenimiento. ahora me gustaría usar una de estas constantes, p. VAL como se define a continuación como valor para un ui-widged.

public class Constants { 
public static final int VAL = 10; 
... 
} 

en mi caso, el widget es una progressbar (estilo horizontal) y me gustaría definir el: valor "androide max". normalmente se puede escribir:

android:max="10" 
android:max="@Integer/val 

pero me gustaría utilizar el valor definido en mi clase de constantes, algo así como:

android:max="Constants.VAL" 

hay una solución para esto?

gracias

+0

No creo que sea posible o no, pero utilizo strings.xml para tales propósitos. Se usa de la misma manera que tu clase Constantes. – belurd

Respuesta

16

No, no puedes. Los valores constantes en las clases solo están disponibles en tiempo de ejecución, y los archivos XML se compilan y generan antes del tiempo de ejecución.

La siguiente mejor opción es declarar las constantes XML que desea utilizar en res/values/integers.xml. He aquí un ejemplo de archivo integers.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <integer name="max">10</integer> 
</resources> 

de usar este valor en el código XML, hacer esto:

<YourComponent 
    android:yourattr="@integer/max"/> 
+0

Si los valores constantes solo están disponibles en el tiempo de ejecución, ¿cómo podemos escribir 'layout_height =" match_parent "', ya que 'match_parent' es una constante? –

0

Su pregunta no está muy claro, ¿qué es lo que quieren hacer con eso? Si desea usar un valor constante, simplemente cree los ui-widgets con las constantes y simplemente ignore el xml.

+0

reformulé la pregunta para una mejor comprensión. No quiero codificar el valor en el archivo xml por razones de mantenimiento. – grAPPfruit

0

Es posible utilizar Data Binding.

La clase debe ser algo como esto:

class Constants extends BaseObservable { 

    private static final int MY_INT = 10; 

    @Bindable 
    public int getMyInt() { 
     return MY_INT; 
    } 
} 

y el xml de esta manera:

<layout 
    ... 
    > 
    <data> 
     <variable 
      name="constants" 
      type="your.package.Constants" /> 
    </data> 

... 

<YourComponent 
    android:max='@{constamts.myInt}' 

... 

</layout> 
  • No se olvide de establecer la propia unión (binding.setConstants(constants)).
Cuestiones relacionadas