2011-11-11 11 views
41

मैं इस हार्डकोडेड गणित कैसे बच है ...मैं एंड्रॉइड आयामों में गणितीय परिचालन कैसे लागू करूं?

<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" /> 

... कुछ इस तरह करने के लिए और यह गुप्त?

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

मैं ईमानदारी से चाहता हूं कि एंड्रॉइड की कार्यक्षमता हो। –

+0

2016 को बनाए रखने के लिए यह एक कम चीज़ हो सकती है और अभी भी –

उत्तर

26

आप नहीं करते हैं, क्षमा करें। लेआउट एक्सएमएल फाइलें अभिव्यक्तियों का समर्थन नहीं करती हैं। आप या तो:

  • @dimen/uno_plus_dos के रूप में छोड़ दो, या
  • जावा कोड, में अपने मार्जिन सेट आप कोड का अतिरिक्त लाइनों के एक समूह के साथ एक भी संसाधन की जगह ले सकता है, या
  • अपने स्वयं के लेआउट पूर्वप्रक्रमक लिखें कि इस

अद्यतनdata binding library इसके भाव में कुछ कार्यों का समर्थन करता है जैसे भाव संभालती है। मैं अनिश्चित हूं अगर यह इस विशिष्ट परिदृश्य को संभाल सकता है।

+3

नहीं है क्या किसी ने अपना स्वयं का (आशावादी ओपन-सोर्स) एंड्रॉइड लेआउट पार्सर लिखने की कोशिश की है? – Supuhstar

1

इस के आसपास कुछ चाल नहीं है, लेकिन यह अपने प्रस्तावित समाधान है, जो कुछ मैं भी चाहता हूँ के रूप में के रूप में अच्छा नहीं होगा। उदाहरण के लिए, आप केवल दृश्य (इस मामले में बटन) पर लेआउट पैडिंग का उपयोग नहीं कर सकते हैं, लेकिन आप इसे दृश्य के माता-पिता (लेयरलायआउट/रिलेटिवलाइट जैसे लेआउट) पर भी कर सकते हैं। आप निश्चित आयामों के साथ अदृश्य दृश्य (एक सीधी दृश्य वस्तु अक्सर काम करता है) में भी डाल सकते हैं। यह होगा की तरह

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

ध्यान दें कि 1px ठीक है अगर केवल 1 पिक्सेल की गारंटी करने के लिए चाहते हैं एक आयाम है, जो आमतौर आप गद्दी के लिए खाली दृश्यों का उपयोग करना चाहते हैं कि आप क्या चाहते है के लिए तैयार किया जाएगा। कुछ लोग कहते हैं कि खाली पैडिंग के लिए फ्रेमलेआउट का उपयोग करना बेहतर है, लेकिन यह

से निकला है कभी-कभी आप पैडिंग और लेआउट पैडिंग को जोड़ सकते हैं, लेकिन यह गन्दा हो सकता है और आपका दृश्य फसल हो सकता है। इसके अलावा आपके पास फ़्रेमलायआउट या लाइनरलाइट जैसे कुछ भी हो सकते हैं, जो उस दृश्य को शामिल करते हैं, और उसमें अतिरिक्त पैडिंग

14

सरल जोड़ के लिए एक चाल मार्जिन + पैडिंग का उपयोग करना है।

+2

चालाक :) यह मेरे लिए किया गया था, thx – muetzenflo

4

का उपयोग करना डेटा बाइंडिंग:

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

IFAIK मार्जिन एडेप्टर एसडीके द्वारा प्रदान नहीं कर रहे हैं। तुम खुद को परिभाषित करने की आवश्यकता होगी: अपने build.gradle में

dataBinding { 
    enabled = true 
} 

:

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

सुनिश्चित करें कि डेटा बाइंडिंग अपनी परियोजना के लिए सक्षम है।

databinding doc पढ़ने लायक है।

+0

क्या आपका मतलब यह है कि यह सेटमॉटम मार्जिन() विधि है क्योंकि इसके परम और तर्क नीचे के लिए हैं मार्जिन? – jk7

संबंधित मुद्दे