3

この 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 のみで同じことを行う方法についての最初の質問に対する答えは見つかりませんでした。

4

2 に答える 2

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>

属性を混ぜずに?


編集:

このリンクは役立つかもしれません。また、使用するとxmlでxmlns:dct="http://schemas.android.com/apk/res-auto"の認識に役立つと思います。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" />
于 2013-03-08T10:06:55.350 に答える
0

dimens.xml をお勧めします。それらを参照して、アプリ全体の左/右/上/下のパディングなどを行うことができます。パディングにViews / ViewGroups(FrameLayoutなど)を使用するなどのこともできます

XML属性をカスタムビューに渡すことも意味していると思います。ビューのコンストラクターには、attrs パラメーターと、obtainStyledAttributes などの属性を取得するためのコマンドがあります。

于 2013-03-08T20:59:05.300 に答える