2017-06-14 9 views
0

私はxmlコードのlayout_marginBottomをdatabindしたいと思います。このバインドをObservable変数でコードにリンクします。観測可能なマージンをデータバインドすることは可能ですか?

私はこのような私の見解でデータバインドを入れてみました:

android:layout_marginBottom="@{viewModel.marginBottom}" 

そして、私のコードを持っている:

public final ObservableFloat marginBottom = new ObservableFloat(0); 

しかし、これはコンパイルされませんが、エラーメッセージは次のとおりです。

Error:(12, 36) Cannot find the setter for attribute 'android:layout_marginBottom' with parameter type float on com.example.customView. 

ObservableIntでも試しましたが、同様のエラーメッセージが表示されました。たぶんintをdpに何らかの形で変換しなければならないのでしょうか?これは可能ですか?どのように私はこの作品を作るのですか?

答えて

0

データバインディングでレイアウトを制御しないでください。しかし、本当にそれをしたい場合は@BindingAdapterと書いて、のLayoutParamsを修正するのは完璧です。

@BindingAdapter("layout_marginBottom") 
public static void setMarginBottom(View view, int margin) { 
    ViewGroup.LayoutParams params = view.getLayoutParams(); 
    if (params instanceof ViewGroup.MarginLayoutParams) { 
     ViewGroup.MarginLayoutParams margins = (ViewGroup.MarginLayoutParams) params; 
     margins.bottomMargin = margin; 
     view.requestLayout(); 
    } 
} 
関連する問題