【发布时间】:2013-03-08 07:59:53
【问题描述】:
我有一个由此 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 中为活动声明此视图并传递 betweenElementsPadding 以便视图的 xml 中的 android:layout_marginRight="?betweenElementsPadding" 起作用?
<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 做同样事情的原始问题的答案。
【问题讨论】:
标签: android android-layout android-widget