我有一个由此 XML 定义的自定义视图
(部分)
<LinearLayout style="@style/LayoutVertWrapContent.SameWidth"
android:layout_weight="2"
android:layout_marginRight="?betweenElementsPadding">
...
some inner views
...
</LinearLayout>
<LinearLayout style="@style/LayoutVertWrapContent.SameWidth"
android:layout_weight="2"
android:layout_marginRight="?betweenElementsPadding">
...
some inner views
...
</LinearLayout>
对于这个视图,我声明了一些属性:
<declare-styleable name="TheView">
...
<attr name="betweenElementsPadding" format="dimension" />
</declare-styleable>
如何在布局 xml 中为活动声明此视图并在ElementsPadding之间传递,以便android:layout_marginRight="?betweenElementsPadding"
视图的 xml 工作?
<com.blablabla.TheView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="@dimen/background_padding" />
所需的结果是android:layout_marginRight
将两个 LinearLayouts 都设置为betweenElementsPadding。
更新 1
为了防止进一步的误解,我想有一种统一的方式来改变dct:betweenElementsPadding,比如说
<com.blablabla.TheView
android:id="@+id/date_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="3dp" />
<com.blablabla.TheView
android:id="@+id/date_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="15dp" />
<com.blablabla.TheView
android:id="@+id/date_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="25dp" />
在每种情况下,我都希望将LinearLayout.layout_marginRight设置为dct: betweenElementsPadding 的确切值,即从第一个开始为 3dp、15dp 和 25dp。
更新 2
使用 Joe 部分建议的解决方法。在自定义视图的样式构造函数中,我这样做:
// set betweenElementsPadding
final int betweenElementsPadding = array.getDimensionPixelSize(R.styleable.TheView_betweenElementsPadding, 0);
((LinearLayout.LayoutParams)((LinearLayout)findViewById(R.id.layout_1)).getLayoutParams()).rightMargin = betweenElementsPadding;
((LinearLayout.LayoutParams)((LinearLayout)findViewById(R.id.layout_2)).getLayoutParams()).rightMargin = betweenElementsPadding;
但是我还没有找到关于如何仅对 XML 执行相同操作的原始问题的答案。