我有一个由此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做同样的事情。
答案 0 :(得分:0)
为什么不使用:
<style name="LayoutVertWrapContent.SameWidth" parent="someOtherStyleIfYouWant">
<item name="android:layout_marginRight">@dimen/background_padding</item>
<item name="android:layout_weight">2</item> <!-- if the same in all -->
</style>
没有混合属性?
修改强>
此link可能会有所帮助,而且我认为使用xmlns:dct="http://schemas.android.com/apk/res-auto"
将有助于识别xml中的dct:betweenElementsPadding
。
<com.blablabla.TheView
xmlns:dct="http://schemas.android.com/apk/res-auto"
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="@dimen/background_padding" />
答案 1 :(得分:0)
我推荐dimens.xml。您可以引用这些来执行应用程序范围的左/右/上/下填充。你也可以使用Views / ViewGroups(例如FrameLayout)来填充
我认为您也可能将XML属性传递给自定义视图。在视图的构造函数中,有attrs参数,以及获取诸如obtainStyledAttributes等属性的命令