【问题标题】:android: assigning a constant value to a xml-elementandroid:为xml元素分配一个常量值
【发布时间】:2011-12-13 16:11:46
【问题描述】:

我目前正在编写一个安卓应用程序。在那里,我被 xml-layout 困住了。 是否可以使用类中定义的变量(常量)为 xml-tag 赋值?

我的所有程序常量都有一个名为 Constants.java 的类。我这样做是为了更好的可维护性。 现在我想使用其中一个常量,例如VAL 如下定义为 ui-widged 的​​值。

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

在我的例子中,小部件是一个进度条(水平样式),我想定义“android:max”值。 通常可以写:

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

但我想使用我的常量类中定义的值,例如:

android:max="Constants.VAL"

有解决办法吗?

谢谢

【问题讨论】:

  • 我不认为这是否可能,但我将 strings.xml 用于此目的。它的使用方式与您的 Constants 类相同。

标签: android xml constants android-xml


【解决方案1】:

不,你不能。类中的常量值只在运行时可用,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"/>

【讨论】:

  • 如果常量值只在运行时可用,我们怎么写layout_height="match_parent",因为match_parent是一个常量?
【解决方案2】:

可以使用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))。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我重新表述了这个问题以便更好地理解。出于可维护性的原因,我不想将值硬编码到 xml 文件中。
    猜你喜欢
    • 2016-12-06
    • 2011-08-19
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多