この 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 で宣言し、view の xml が機能するようにbetweenElementsPaddingandroid: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の正確な値に設定する必要があります。これは、最初から 3 dp、15 dp、および 25 dp です。
更新 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 のみで同じことを行う方法についての最初の質問に対する答えは見つかりませんでした。