2016-01-16 5 views
8

से आयाम कैसे प्राप्त करें मैं dimens.xml में बनाए गए आयामों के आधार पर मार्जिन सेट करना चाहता हूं आयाम यह स्वयं ठीक काम करता है, इसका डेटा बाध्यकारी इसे नीचे दिए गए मामले में नहीं ढूंढ सकता:एंड्रॉइड डाटाबेसिंग - dimens.xml

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

इसे यह मिला लेकिन यह कहता है कि मार्जिनबॉटम प्रकार फ्लोट नहीं ले सकता है। मैं इसे कैसे ठीक करूं? मैंने दोनों मंदियों को int को कास्टिंग करने का प्रयास किया लेकिन फिर यह शिकायत करता है कि इसे int में नहीं डाला जा सकता है।

मेरे आयाम xml फ़ाइल इस तरह दिखता है:

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

उत्तर

21

समस्या यहाँ आयामों के साथ नहीं है, लेकिन android:layout_marginBottom साथ। किसी भी LayoutParams विशेषताओं के लिए कोई अंतर्निहित समर्थन नहीं है। यह "पैर गन" को हटाने के लिए किया गया था जो कई LayoutParams पर चर को बाध्य करने के लिए उपयोग कर सकते हैं और हो सकता है कि वे इस स्थिति को अपने तरीके से एनिमेट करने के लिए डेटा बाइंडिंग का उपयोग करने का प्रयास करें।

डेटा बाइंडिंग आपके उदाहरण में उपयोग करने के लिए बिल्कुल सही है और आप आसानी से अपना खुद का जोड़ सकते हैं। यह ऐसा कुछ होगा।

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

आप, ज़ाहिर है, भी जोड़ बाईं, ऊपर, ठीक है, शुरू करते हैं, और BindingAdapters अंत के साथ ही होगा।

+0

मुझे यह कोड कहां लिखना चाहिए? क्या मैं जो लेआउट निर्दिष्ट करता हूं वह मार्जिनबॉटम इस विधि का उपयोग कर रहे हैं या केवल डेटा बाध्यकारी वाले या केवल यह विशेष लेआउट? –

+0

आप इसे किसी ऐसे प्रोजेक्ट में किसी भी (सार्वजनिक) कक्षा में जोड़ सकते हैं जिसमें डेटा बाइंडिंग सक्षम है। इसका उपयोग सभी डेटा बाध्य मार्जिन विशेषताओं के लिए किया जाएगा। –

+0

समस्या सरल है: मार्जिन दृश्य की संपत्ति नहीं है, लेकिन दृश्य का लेआउट उदाहरण है। आप पैडिंग जैसे अन्य दृश्य गुणों के साथ जो भी प्रयास कर सकते हैं, वही कर सकते हैं, लेकिन एक अच्छा कारण है कि मार्जिन विशेषताओं में उपसर्ग 'लेआउट_' क्यों है। – racs

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