2012-10-31 11 views
23

मैं एडिटटेक्स्ट के 10 डीपी के लिए डिफ़ॉल्ट मार्जिन चाहता हूं। इसलिए, मेरा styles.xml फ़ाइल में मैं निम्नलिखित की स्थापना:एंड्रॉइड - कस्टम शैली में निर्दिष्ट मार्जिन प्रभाव नहीं ले रहे

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/MyTheme" > 
... 

"कोई शीर्षक पट्टी:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

    <style name="MyTheme" parent="android:style/Theme.NoTitleBar"> 
     <item name="android:editTextStyle">@style/edit_text_default</item> 
    </style> 

    <style name="edit_text_default" parent="android:style/Widget.EditText"> 
     <item name="android:layout_margin">10dp</item> 
    </style> 

</resources> 
फिर AndroidManifest.xml में

, मैं एक मैं परिभाषित करने के लिए आवेदन पत्र विषय सेट "विषय का पहलू काम कर रहा है। हालांकि, EditText के लिए डिफ़ॉल्ट मार्जिन नहीं है, यह अभी भी अभिभावक को भर रहा है। यहां मेरा टेबल व्यू है:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF" > 
    <TableRow> 
     <EditText android:hint="@string/last_name" /> 
    </TableRow> 
    <TableRow> 
     <EditText android:hint="@string/first_name" /> 
    </TableRow> 
</TableLayout> 

उत्तर

48

लघु उत्तर: आप एक कस्टम शैली में layout_margin को निर्दिष्ट कर रहे हैं, इस शैली स्पष्ट रूप से प्रत्येक व्यक्ति का मानना ​​है कि आपके द्वारा निर्दिष्ट मार्जिन (के लिए के रूप में देखा इच्छा को लागू किया जाना चाहिए नीचे कोड नमूना)। इस शैली को थीम में शामिल करना और इसे अपने एप्लिकेशन या गतिविधि में लागू करना काम नहीं करेगा।

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF" > 
    <TableRow> 
     <EditText android:hint="@string/last_name" style="@style/edit_text_default" /> 
    </TableRow> 
    <TableRow> 
     <EditText android:hint="@string/first_name" style="@style/edit_text_default" /> 
    </TableRow> 
</TableLayout> 

स्पष्टीकरण: गुण जो layout_ के साथ शुरू LayoutParams कर रहे हैं, या उसके उपवर्गों में से एक (जैसे MarginLayoutParams)। LayoutParams उनके माता-पिता ViewGroup को बताने के लिए विचारों द्वारा उपयोग किए जाते हैं कि वे कैसे निर्धारित करना चाहते हैं। प्रत्येक ViewGroup कक्षा एक नेस्टेड कक्षा लागू करती है जो ViewGroup.LayoutParams फैली हुई है। इसलिए, LayoutParamsViewGroup के प्रकार के लिए विशिष्ट हैं। इसका अर्थ यह है कि TableLayout और LinearLayout दोनों में layout_margin दोनों LayoutParams में से एक के रूप में हो सकते हैं, उन्हें पूरी तरह से अलग विशेषताओं माना जाता है।

तो layout_margin केवल सामान्य विशेषता नहीं है जिसे कहीं भी लागू किया जा सकता है। इसे ViewGroup के संदर्भ में लागू किया जाना चाहिए जो विशेष रूप से इसे वैध तर्क के रूप में परिभाषित करता है। लागू होने पर एक दृश्य अवगत अपने माता-पिता ViewGroup के प्रकार से अवगत होना चाहिए।

किसी शैली में लेआउट_मार्गिन निर्दिष्ट करना, थीम में उस शैली समेत, और उस थीम को किसी एप्लिकेशन/गतिविधि पर लागू करने का प्रयास करने के परिणामस्वरूप लेआउट विशेषताएं गिरा दी जाएंगी, क्योंकि कोई व्यू ग्रुप पैरेंट अभी तक निर्दिष्ट नहीं किया गया है और इसलिए तर्क हैं अवैध। हालांकि, EditText पर शैली को लागू करना जिसे TableLayout कार्यों के साथ परिभाषित किया गया है, क्योंकि माता-पिता ViewGroup (TableLayout) ज्ञात है।

सूत्रों का कहना है:

Layout Parameters पर Android दस्तावेज़।

एंड्रॉइड फ्रेमवर्क इंजीनियर और स्टैक ओवरव्लो उपयोगकर्ता adamp द्वारा this question को दिए गए उत्तर।

इसके अलावा, this question को स्टैक ओवरव्लो उपयोगकर्ता inazaruk द्वारा दिए गए उत्तर को उत्तर दिया गया।

+4

डब्ल्यू ... टी ... एफ ?? क्यूं कर? क्यूं कर? क्यूं कर?!?! ... कृपया मुझे माफ़ कर दो ... मैं एंड्रॉइड विकास के सभी quirks के साथ अपना दिमाग खो रहा हूँ। – pbarranis

+0

यह उत्तर कुछ हद तक असंतोषजनक है - लेआउट मार्जिन तब भी लागू नहीं होते हैं जब माता-पिता ViewGroup और बच्चे दृश्य एक ही लेआउट xml फ़ाइल में होते हैं। इस मामले में inflater * * माता-पिता ViewGroup के ठोस प्रकार के बारे में जानता है (क्योंकि यह इसे अभी बढ़ाता है) और लागू करने के लिए शैली को भी जानता है (क्योंकि अन्य शैली विशेषताओं को लागू किया जाता है)। –

1

आप अपने मैनिफेस्ट में सही थीम नाम का उपयोग नहीं कर रहे हैं। करने के लिए इसे बदलने का प्रयास करें:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/MyTheme" > 
+0

क्षमा करें, वह मेरे हिस्से पर पोस्ट में एक टाइपो था। वे मेरी वास्तविक परियोजना में समान हैं। अच्छा सुझाव हालांकि:/ – Groppe

0

बस अगर यह दूसरों के लिए उपयोगी है, तो मैं यहां the answer by Oliv to another SO question लाऊंगा। मैं सभी बटनों में मार्जिन जोड़ने की कोशिश कर रहा था और पाया कि layout_margin काम नहीं करता है।

विषय:

<style name="FooThemeStyle" parent="Base.Theme.AppCompat"> 
    <item name="android:buttonStyle">@style/FooButton</item> 
    <item name="buttonStyle">@style/FooButton</item> 
</style> 

बटन शैली:

<style name="FooButton" parent="Widget.AppCompat.Button"> 
    <item name="android:background">@drawable/button_background</item> 
</style> 

यहाँ button_background.xml जहां the answer by Oliv to another SO question 2dp को मार्जिन सेट करने के लिए प्रयोग किया जाता है:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:bottom="2dp" 
     android:left="2dp" 
     android:right="2dp" 
     android:top="2dp"> 
     <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
      ... 
     </selector> 
    </item> 
</layer-list> 
संबंधित मुद्दे