2010-05-21 14 views
20

Aşağıdaki LinearLayout ürününe sahibim. Anlamadığım şey, arka planı başka bir görüntüye ayarlarsam, doldurma bilgileri sıfırlanır. Bunu önlemek için bir yol var mı?Arka planın değiştirilmesi, aynı zamanda LinearLayout'un dolgularını da değiştiriyor mu?

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

ben LinearLayoutBir panel arkaplan çekilebilir değiştirdiğinizde çocukların pozisyon değiştirdi 'e bakın.

+0

"padding bilgi sıfırlanır" senin delilin nedir? Başka bir deyişle, gerçek semptomlarınız nelerdir? – CommonsWare

+2

http://stackoverflow.com/questions/5890379/android-setbackgroundresource-discards-my-xml-layout-attributes ile aynı sorun - dolgu sadece setBackgroundResource() çağrıldıktan sonra sıfırlanır (muhtemelen yalnızca 9-patch arka planlar ile ilişkilidir)). –

cevap

36

üzerinde Drawable arka planını değiştirirken varsayılan davranış budur. Android geliştiricilerinden biri olan Romain Guy'a göre, "Bir görüntüyü ayarlama nedenini yeniden başlatmanın nedeni, 9-yama görüntülerinin dolguları kodlayabilmesidir." Tam cevabını similar question numaralı telefondan görebilirsiniz.

Düzeltme, arka plan çizgilerini her değiştirdiğinizde kodlamayı kodla sıfırlamaktır.

+0

Michael lütfen bunu doğru cevap olarak işaretleyin. – Sufian

14

This benzer bir sorudur.

kısacası cevap şöyle olacaktır: çekilebilir 9 yama çekilebilir olabileceği için sıfırlama olmak dolgu için

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

nedenidir.

+1

Ayrıca, uygun durum kümesini kullanarak seçiciyi kullanarak arka plan ayarlayabilirsiniz. O zaman, –

+0

@ ArkadiuszCieśliński Taburunu düzeltmek zorunda değilsiniz. Davaya ve ihtiyaçlarinize göre değişir –

+0

@androiddeveloper Dolgu işini yapmak için bakış açısını göndermek zorunda kaldım, neden bu oluyor? –

0

Sen tek renk veya görüntü ile arka plan ayarlamak ve bunun gibi dolgu uygulamak için şekil kullanabilirsiniz:

<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> 
İlgili konular