ブール値が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}'/>
パディング値をdimen.xml
に格納して使用します。バインディング文字列を「」(二重引用符)で書く習慣をつけてください
Android:paddingBottom="@{isGroupType ? @dimen/padding_normal : @dimen/padding_null}"
他のパディングについても同様です。
ヘッズアップと同じように、これはlayout_margin
では機能しません:(
理由はわかりませんが、親のレイアウトを再測定する必要があるためだと思います。
@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}"/>
@Raviの答えは良いですが、パディングに対してのみ機能します。単にマージンを追加したい場合は、パディング付きのTextViewなどの空のビューを作成します。
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}"