如何在xml中求和值?

时间:2014-04-23 06:43:42

标签: xml android-layout

假设我在XML文件中定义了2个维度值,并且想要定义第3个值,该值是其他2个值的总和。有没有办法在XML文件中执行此操作?

以下是我想要做的事情。

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <dimen name="top_element_size">10dp</dimen>
 <dimen name="element_spacing">5dp</dimen>
 <dimen name="bottom_element_top">@dimen/top_element_size + @dimen/element_spacing</dimen>
</resources>

我想为android:layout_marginTop="@dimen/bottom_element_top"布局中的底部元素定义frame。 但似乎@dimen/top_element_size + @dimen/element_spacing不合法。

2 个答案:

答案 0 :(得分:7)

您无法在xml文件中执行算术或逻辑运算。动态地,您可以从xml中检索数据并对java代码中的值求和,然后将该值设置为LinearLayout或FrameLayout或任何其他小部件的参数。

答案 1 :(得分:1)

现在Data Binding

部分可行
  1. 启用数据绑定

  2. 为要使用算术的每个标签编写Binding Adapter。 由于@dimen/smth返回float,因此适配器应采用float:

    @BindingAdapter("android:layout_marginTop")
    fun setTopMargin(view: View, topMargin: Float) {
        (view.layoutParams as ViewGroup.MarginLayoutParams).topMargin = topMargin.toInt()
    }
    
  3. 在布局中使用它(!不在资源中)

    <View
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginTop="@{@dimen/top_element_size + @dimen/element_spacing}"/>