2011-12-13 15 views
11

पर निरंतर मान असाइन करना मैं वर्तमान में एंड्रॉइड ऐप प्रोग्रामिंग कर रहा हूं। वहां मैं एक्सएमएल-लेआउट के साथ फंस गया हूँ। क्या कक्षा में परिभाषित एक चर (स्थिर) का उपयोग कर किसी XML-टैग को मान असाइन करना संभव है?एंड्रॉइड: xml-element

मेरे पास मेरे सभी कार्यक्रम स्थिरांक के लिए Constants.java नामक एक कक्षा है। मैं बेहतर रखरखाव के लिए यह करता हूं। अब मैं इस स्थिरांक में से एक का उपयोग करना चाहता हूं, उदा। एक यूई-चौड़े के लिए मूल्य के रूप में नीचे परिभाषित वैल।

public class Constants { 
public static final int VAL = 10; 
... 
} 
मेरे मामले में

, विजेट एक प्रगति बार (क्षैतिज शैली) है और मैं परिभाषित करना चाहते हैं "एंड्रॉयड: अधिकतम" मूल्य। सामान्य रूप से एक लिख सकते हैं:

android:max="10" 
android:max="@Integer/val 

लेकिन मैं मूल्य मेरी स्थिरांक वर्ग में परिभाषित है, की तरह कुछ का उपयोग करना चाहेंगे:

android:max="Constants.VAL" 

वहाँ उस के लिए एक समाधान है?

धन्यवाद

+0

मुझे नहीं लगता कि यह संभव है या नहीं, लेकिन मैं इस तरह के उद्देश्यों के लिए strings.xml का उपयोग करता हूं। इसका उपयोग आपके कॉन्स्टेंट्स क्लास के समान तरीके से किया जाता है। – belurd

उत्तर

16

नहीं, आप नहीं कर सकते। कक्षाओं में लगातार मूल्य केवल रनटाइम पर उपलब्ध होते हैं, और एक्सएमएल फाइलों को संकलित और रनटाइम से पहले जेनरेट किया जाता है।

करने के लिए अगली सबसे अच्छी बात यह है कि आप res/values/integers.xml में एक्सएमएल स्थिरांक का उपयोग करना चाहते हैं। यहाँ एक उदाहरण integers.xml फ़ाइल है:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <integer name="max">10</integer> 
</resources> 

अपने एक्सएमएल में इस मूल्य का उपयोग करने के लिए, ऐसा करते हैं:

<YourComponent 
    android:yourattr="@integer/max"/> 
+0

यदि स्थिर मान केवल रनटाइम पर उपलब्ध हैं, तो हम 'layout_height =" match_parent "कैसे लिख सकते हैं, क्योंकि 'match_parent' स्थिर है? –

0

आपका प्रश्न बहुत स्पष्ट नहीं है, क्या आपको लगता है कि के साथ क्या करना चाहते हैं? यदि आप निरंतर मान का उपयोग करना चाहते हैं तो बस स्थिरांक के साथ ui-widgets बनाएं और केवल xml को अनदेखा करें।

+0

मैंने बेहतर समझदारी के लिए प्रश्न को दोहराया। मैं स्थिरता-कारणों के लिए xml-file में मान को हार्डकोड नहीं करना चाहता हूं। – grAPPfruit

0

यह Data Binding का उपयोग कर सकता है।

वर्ग कुछ इस तरह दिखना चाहिए:

class Constants extends BaseObservable { 

    private static final int MY_INT = 10; 

    @Bindable 
    public int getMyInt() { 
     return MY_INT; 
    } 
} 

और इस तरह xml:

<layout 
    ... 
    > 
    <data> 
     <variable 
      name="constants" 
      type="your.package.Constants" /> 
    </data> 

... 

<YourComponent 
    android:max='@{constamts.myInt}' 

... 

</layout> 
  • मत भूलना ही बाध्यकारी (binding.setConstants(constants)) स्थापित करने के लिए।