假设我在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
不合法。
答案 0 :(得分:7)
您无法在xml文件中执行算术或逻辑运算。动态地,您可以从xml中检索数据并对java代码中的值求和,然后将该值设置为LinearLayout或FrameLayout或任何其他小部件的参数。
答案 1 :(得分:1)
启用数据绑定
为要使用算术的每个标签编写Binding Adapter。
由于@dimen/smth
返回float,因此适配器应采用float:
@BindingAdapter("android:layout_marginTop")
fun setTopMargin(view: View, topMargin: Float) {
(view.layoutParams as ViewGroup.MarginLayoutParams).topMargin = topMargin.toInt()
}
在布局中使用它(!不在资源中)
<View
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="@{@dimen/top_element_size + @dimen/element_spacing}"/>