2017-06-14 2 views
0

Ich möchte eine layout_marginBottom in meinem XML-Code. Verknüpfen Sie diese Bindung mit einer Observable-Variablen in den Code.Ist es möglich, eine Marge mit einer Observablen zu erfassen?

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

Und dann in meinem Code haben:

public final ObservableFloat marginBottom = new ObservableFloat(0); 

Aber das wird nicht kompilieren, ist die Fehlermeldung:

ich die databind meiner Ansicht nach so zu setzen versucht,

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

Ich versuchte mit ObservableInt zu, aber ähnliche Fehlermeldung. Vielleicht muss ich das int in ein dp umwandeln? Ist das möglich? Wie mache ich das?

Antwort

0

Sie sollten Ihr Layout nicht durch Datenbindung steuern. Aber wenn Sie es wirklich wollen, sollte es vollkommen in Ordnung sein, eine @BindingAdapter für die Ränder zu schreiben, die die LayoutParams der View ändert.

@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(); 
    } 
} 
Verwandte Themen