なぜandroid:layout_width="@{60dp}"
が動作しないのかという質問に答えるためには、データバインディングが 'dp'の概念を理解していないからです。
layout_width
は既定ではサポートされていないため、既に属性のBindingAdapterが作成されているか、まったく動作しません。
@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, float width) {
LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = (int)width;
view.setLayoutParams(layoutParams);
}
float width
が何であるかをBindingAdapterの兆候はありません:たぶん、あなたはこのような何かを持っています。タイプはないので、その知識をデータバインディングシステムの定数に転送する方法はありません。それはあなたはで渡すことができますが、
android:visibility="@{View.INVISIBLE}"
代わりの
android:visibility="@{invisible}"
setVisibility()
にint型の値を設定する文脈でinvisible
定数何のjavaはありませんを使用しなければならないのと同じ理由であります60
のような整数定数を代入します。残念ながら、これらはLayoutParamsのピクセルであり、デバイス間で変化します。
@dimen/someDimension
を使用すると、データバインディングは、値がリソースから抽出された時点でディメンションをフロートに変換します。 Resources.getDimension()
がfloat
を返すので、分かりやすいです。同様に、Resources.getColor()
は整数を返します。したがって、カラーリソースを渡すたびに整数を渡します。
希望に役立ちます。
現時点では3値を忘れています。 'android:layout_width =" @ {60dp} "'は動作しますか? – CommonsWare
@ {60dp}と@ {'60dp'}は動作しません – JPM
したがって、問題は3値ではありません。私の前提は、式言語は単に次元定数を扱わないということです。 – CommonsWare