2010-05-21 16 views
20

मेरे पास निम्नलिखित LinearLayout है। मुझे समझ में नहीं आता है कि अगर मैं पृष्ठभूमि को किसी अन्य छवि पर सेट करता हूं, तो पैडिंग जानकारी रीसेट हो जाती है। क्या इसको रोकने के लिए कोई रास्ता है?क्या पृष्ठभूमि बदलना लाइनरलाउट के पैडिंग को भी बदलता है?

<LinearLayout android:id="@+id/aPanel" 
    android:orientation="horizontal" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:background="@drawable/bkground" 
    android:paddingLeft="15dp" android:paddingRight="15dp"> 

    <!-- some children here --> 
    </LinearLayout> 

मैं बच्चों की स्थिति स्थानांतरित हो जब मैं LinearLayoutaPanel की पृष्ठभूमि drawable बदल देखें।

+0

अपने सबूत है कि "पैडिंग जानकारी रीसेट कर रहे हैं" क्या है? दूसरे शब्दों में, आपके वास्तविक लक्षण क्या हैं? – CommonsWare

+2

वही समस्या http://stackoverflow.com/questions/5890379/android-setbackgroundresource-discards-my-xml-layout-attributes - पैडिंग बस सेटबैकग्राउंड रिसोर्स() के बाद रीसेट हो जाती है (संभवतः केवल 9-पैच पृष्ठभूमि से संबंधित है)। –

उत्तर

36

पर पृष्ठभूमि Drawable को बदलते समय यह डिफ़ॉल्ट व्यवहार है। एंड्रॉइड डेवलपर्स में से एक रोमैन गाय के अनुसार, "एक छवि को पैडिंग रीसेट करने का कारण यह है क्योंकि 9-पैच छवियां पैडिंग को एन्कोड कर सकती हैं।" similar question में उसका पूरा उत्तर देखें।

प्रत्येक बार जब आप पृष्ठभूमि को खींचने योग्य बदलते हैं तो कोड में पैडिंग को रीसेट करना ठीक है।

+0

@ माइकल कृपया इसे सही उत्तर के रूप में चिह्नित करें। – Sufian

14

This एक समान प्रश्न है।

संक्षेप में, इस सवाल का जवाब होगा:

public static void setViewBackgroundWithoutResettingPadding(final View v, final int backgroundResId) { 
    final int paddingBottom = v.getPaddingBottom(), paddingLeft = v.getPaddingLeft(); 
    final int paddingRight = v.getPaddingRight(), paddingTop = v.getPaddingTop(); 
    v.setBackgroundResource(backgroundResId); 
    v.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom); 
} 

गद्दी रीसेट किया जा रहा के लिए कारण यह है कि drawable एक 9-पैच drawable हो सकता है।

+1

आप राज्यों के उचित सेट के साथ चयनकर्ता का उपयोग करके पृष्ठभूमि भी सेट कर सकते हैं। तो आपको पैडिंग –

+0

@ ArkadiuszCieśliński Sure को पुनर्स्थापित करने की आवश्यकता नहीं है। मामले और आपकी आवश्यकताओं पर निर्भर करता है –

+0

@androiddeveloper मुझे पैडिंग काम करने के लिए दृश्य के लिए एक रननेबल पोस्ट करना पड़ा, यह क्यों हो रहा है? –

0

आप आकार का उपयोग कर सकते एकल रंग या छवि के साथ पृष्ठभूमि की स्थापना की और इस तरह गद्दी लागू करने के लिए:

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#FFFFFF"/> 
    <corners 
     android:bottomLeftRadius="8dip" 
     android:topLeftRadius="8dip"/> 
    <padding 
     android:bottom="0dip" 
     android:left="0dip" 
     android:right="0dip" 
     android:top="0dip"/> 
</shape> 

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

  • कोई संबंधित समस्या नहीं^_^