2016-01-16 13 views
8

Marjları, dimens.xml içinde oluşturduğum boyutlara göre ayarlamak istiyorum Kendisinin boyutları iyi çalışıyor, yalnızca veri bağlaması aşağıdaki durumda bulamıyor:Android databinding - Dimens.xml'den boyutlar nasıl elde edilir

<TextView 
      android:id="@+id/title_main" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@+id/disableButton" 
************* 
     android:layout_marginBottom="@{@bool/showAds ? 
@dimen/frontpage_margin_ads: @dimen/frontpage_margin_noads}" 
*************   
android:gravity="center_horizontal" 
     android:text="@string/app_name" 
     android:textColor="@android:color/holo_orange_dark" 
     android:contentDescription="@string/app_name" 
     android:textSize="64sp" 
     android:textStyle="bold" /> 

bunu bulmuş fakat marginbottom'un tip float alamadığını söylüyor. Bunu nasıl düzeltebilirim? Her ikisini de int olarak değiştirmeyi denedim ama sonra int için kullanılamayacağını şikayet ediyor.

Benim boyutları xml dosyası şuna benzer:

<resources> 

    <!-- Default screen margins, per the Android Design guidelines. --> 
    <dimen name="activity_horizontal_margin">16dp</dimen> 
    <dimen name="activity_vertical_margin">16dp</dimen> 
    <dimen name="bigText">44sp</dimen> 
    <dimen name="littleText">44sp</dimen> 
    <dimen name="mediumText">40sp</dimen> 
     <dimen name="smallText">24sp</dimen> 
    <dimen name="fab_margin">16dp</dimen> 
    <dimen name="frontpage_margin_noads">0dp</dimen> 
    <dimen name="frontpage_margin_ads">13dp</dimen> 


</resources> 

cevap

21

sorun burada ama android:layout_marginBottom ile boyutlarla değildir. Herhangi bir LayoutParams özniteliği için yerleşik destek yoktur. Bu, birçok kişinin değişkenleri LayoutParams'a bağlamak için kullanabileceği "ayak tabancasını" kaldırmak için yapıldı ve belki de konumlarını bu şekilde hareketlendirmek için veri bağlamayı kullanmaya çalışabilir.

Veri Bağlama, örneğinizde kullanmak için idealdir ve kolayca kendi başınıza ekleyebilirsiniz. Böyle bir şey olurdu.

@BindingAdapter("android:layout_marginBottom") 
public static void setBottomMargin(View view, float bottomMargin) { 
    MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams(); 
    layoutParams.setMargins(layoutParams.leftMargin, layoutParams.topMargin, 
     layoutParams.rightMargin, Math.round(bottomMargin)); 
    view.setLayoutParams(layoutParams); 
} 

Elbette, aynı zamanda sol, üst, sağ, start ekleyin ve aynı zamanda BindingAdapters sona ereceğini.

+0

Bu kodu nereden yazmalıyım? MarginBottom'u belirttiğim tüm düzenler bu yöntemi mi, yoksa sadece veri bağlayıcı olanları mı yoksa sadece bu özel düzeni mi kullanacak? –

+0

Bunu, veri bağlamaya sahip bir projedeki (herkese açık) bir sınıfa ekleyebilirsiniz. Tüm veri sınırı marjı öznitelikleri için kullanılacaktır. –

+0

Sorun basit: kenar boşluğu görünümün değil, görünümün düzen örneğidir. Dolgu gibi diğer görünüm özellikleriyle denediğiniz şeyi yapabilirsiniz, ancak marj özelliklerinin 'layout_' önekine sahip olmasının iyi bir nedeni vardır. – racs

İlgili konular