web-dev-qa-db-ja.com

Android値がtrueの場合、データバインディングセットのパディング

ブール値がtrueの場合、パディング値を設定できるようにしたいと思います。問題は、Android studioは、2dpが値2の小数であると見なし、pをどう処理するかわからないため、レイアウトを解析できないことです。これをフォーマットするにはどうすればよいですか?それは私が2密度ピクセルを意味することを理解していること。

データレイアウト:

<data class=".ItemBinding">
    <variable name="isGroupType" type="Boolean"/>
</data>

ビューレイアウト(重要事項):

<Android.support.v7.widget.AppCompatImageView
            Android:layout_width="64dp"
            Android:layout_height="64dp"
            Android:paddingBottom='@{isGroupType ? 2dp : 0dp}'
            Android:paddingTop='@{isGroupType ? 8dp : 0dp}'
            Android:paddingRight='@{isGroupType ? 2dp : 0dp}'
            Android:paddingLeft='@{isGroupType ? 2dp : 0dp}'/>
13
Theyouthis

パディング値をdimen.xmlに格納して使用します。バインディング文字列を「」(二重引用符)で書く習慣をつけてください

Android:paddingBottom="@{isGroupType ? @dimen/padding_normal : @dimen/padding_null}"

他のパディングについても同様です。

14
Ravi Rupareliya

ヘッズアップと同じように、これはlayout_marginでは機能しません:(

理由はわかりませんが、親のレイアウトを再測定する必要があるためだと思います。

6
ZooMagic

@Raviの答えは正しいです。

しかし、柔軟性を高めるために、これを試すこともできます。

@BindingAdapter({"padding", "shouldAdd"})
public static void setPadding(AppCompatImageView imageView, boolean shouldAdd, int padding){
    if (shouldAdd){
        imageView.setPadding(padding, padding, padding, padding);
    }
}

次に:

<Android.support.v7.widget.AppCompatImageView
        Android:layout_width="64dp"
        Android:layout_height="64dp"
        shouldAdd="@{isGroupType}"
        padding="@{10}"/>
2
Ayokunle Paul

@Raviの答えは良いですが、パディングに対してのみ機能します。単にマージンを追加したい場合は、パディング付きのTextViewなどの空のビューを作成します。

0
maatik5

DataBindingを介してマージンを設定しようとしている人は、BindingAdapterも使用する必要があります。

@BindingAdapter("layoutMarginBottom")
fun setLayoutMarginBottom(view: View, dimen: Float) {
    val layoutParams = view.layoutParams as MarginLayoutParams
    layoutParams.bottomMargin = dimen.toInt()
    view.layoutParams = layoutParams
}

そして、xmlプロパティは次のようになります。

app:layoutMarginBottom="@{item.shouldShowSkipOption ? @dimen/zero_dp : @dimen/twenty_dp}"
0
Sarthak Mittal