2011-11-11 10 views
41
Bu kodlanmış matematik önlemek nasıl

... Matematiksel işlemleri Android boyutlarına nasıl uygularım?

<resources> 
<dimen name="uno">10dip</dimen> 
<dimen name="dos">6dip</dimen> 
<dimen name="uno_plus_dos">16dip</dimen> 
</resources> 

<Button 
android:layout_marginTop="@dimen/uno_plus_dos" /> 

... ve gizli böyle bir şeye?

<Button 
android:layout_marginTop="@dimin/uno + @dimen/dos" /> 
+11

Gerçekten Android'in bu işlevselliğe sahip olmasını diliyorum. –

+0

2016'yı korumak için daha az şey olabilir ve hala orada değil –

cevap

26

Yapma, üzgünüm. Düzen XML dosyaları ifadeleri desteklemez. Ya: @dimen/uno_plus_dos olarak

  • bırak onu, veya Java kodu, içinde
  • ayarlayın marjları kod ekstra hatlarının bir grup ile tek bir kaynak yerine, ya
  • Kendi düzen önişlemci yaz bu

UPDATEdata binding library onun ifadelerde bazı operasyonları destekler gibi ifadeler yönetir. Bu özel senaryoyu ele alıp alamayacağından emin değilim.

+3

Hiç kimse kendi (umar açık kaynak kodlu) Android düzen ayrıştırıcısını yazmaya çalıştı mı? – Supuhstar

1

Bu konuyla ilgili birkaç ipucu var ama önerilen çözümünüzün kadar iyi olmaz, ki bu da istediğim bir şey. Örneğin, yalnızca Görünümde değil (bu durumda Düğme) için düzen kaplamalarını kullanabilirsiniz, ancak bunu aynı zamanda görüntünün ebeveyinde de yapabilirsiniz (LinearLayout/RelativeLayout gibi düzen). Ayrıca sabit boyutlarda görünmezlik Görünümlerini (düz bir Görünüm nesnesi sıklıkla çalışır) de ekleyebilirsiniz. Bu olurdu genellikle dolgu için boş görünümleri kullanmak istiyorsanız istediğini bir boyuta için çekilecek sadece 1 piksel garanti istiyorsanız 1px ince olduğunu

<View 
    android:layout_width="1px" 
    andoird:layout_height="@dimen/dos" /> 

Not gibi. Bazıları FrameLayout'ın boş dolgu için daha iyi olduğunu söylüyor ancak View

'dan geliyor. Bazen, dolgu ve düzen dolgularını birleştirebilirsiniz, ancak bu durum dağınık olabilir ve görünümünüzü kırpabilirsiniz. Ayrıca, FrameLayout veya LinearLayout gibi bir görünümü yalnızca bu görünümü içerebilir ve eklenmiş dolguya sahip olmak için bunu kullanabilirsiniz

14

Basit ekleme için tek bir numara kenar boşluğu + dolgu kullanmaktır.

+2

zeki :) benim için yaptı, thx – muetzenflo

4

kullanma veri bağlama:

android:layout_marginTop="@{@dimen/uno + @dimen/dos}" 

IFAIK marjları adaptörleri sdk tarafından sağlanmaz. Bunu kendin tanımlamak gerekir:

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

emin veri bağlama projeniz için etkin olduğundan emin olun:

dataBinding { 
    enabled = true 
} 

sizin build.gradle içinde.

databinding doc, okumaya değer.

+0

Bu param ve mantık bottomMargin için beri bir setBottomMargin() yöntemi mi demek istediniz? – jk7

İlgili konular