2011-12-13 73 views
11

我目前正在编写一个android应用程序。在那里我被xml-layout卡住了。 是否可以使用类中定义的变量(常量)为xml-tag赋值?android:为一个xml元素分配一个常量值

我有一个名为Constants.java的类,用于我所有的程序常量。我这样做是为了更好的可维护性。 现在我想使用这些常数之一,例如VAL如下面定义的那样用作UI用户的值。

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

在我的情况下,小部件是一个progressbar(水平样式),我想定义“android:max”值。 通常可以写成:

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

,但我想用我的常量类中定义的值,是这样的:

android:max="Constants.VAL" 

是有一个解决方案?

谢谢

+0

我不认为如果有可能,但我使用strings.xml这样的目的。它的使用方式与您的Constants类相同。 – belurd

回答

16

不,你不能。类中的常量值仅在运行时可用,并且XML文件在运行时被编译和生成。

要做的次最好的事情是声明你想在res/values/integers.xml中使用的XML常量。下面是一个例子integers.xml文件:

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

使用在你的XML这个值,这样做:

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

如果常量值仅在运行时可用,那么我们如何编写'layout_height =“match_parent”',因为'match_parent'是一个常量? –

0

你的问题不是很清楚,你想怎么做? 如果你想使用一个常量值,那么只需使用常量创建ui-widgets,并忽略xml。

+0

为了更好的理解,我重新提出了这个问题。 为了可维护性原因,我不想将值硬编码到xml文件中。 – grAPPfruit

0

它使用Data Binding是可能的。

类应该是这个样子:

class Constants extends BaseObservable { 

    private static final int MY_INT = 10; 

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

和XML这样的:

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

... 

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

... 

</layout> 
  • 不要忘记设置绑定自己(binding.setConstants(constants))。