2010-05-21 5 views
20

나는 다음과 같은 것을 가지고있다. LinearLayout. 내가 이해할 수없는 것은 배경을 다른 이미지로 설정하면 패딩 정보가 재설정된다는 것입니다. 이것을 막을 수있는 방법이 있습니까?배경을 변경해도 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의 배경 드로어 블을 변경할 때 아이의 위치가 이동 얻을 참조하십시오.

+0

"패딩 정보가 리셋된다"고 귀하의 증거는 무엇인가? 즉, 실제 증상은 무엇입니까? – CommonsWare

+2

http://stackoverflow.com/questions/5890379/android-setbackgroundresource-discards-my-xml-layout-attributes와 동일한 문제 - setBackgroundResource()가 호출 된 후 패딩이 단순히 재설정되는 경우 (가능하면 9 패치 배경에만 관련됨)). –

답변

36

View의 배경을 Drawable으로 변경할 때의 기본 동작입니다. 안드로이드 개발자 중 한 명인 Romain Guy에 따르면 "이미지를 설정하면 패딩을 다시 설정하는 이유는 9 패치 이미지가 패딩을 인코딩 할 수 있기 때문입니다." 그의 대답은 similar question에서 확인하십시오.

해결 방법은 배경 드로어 블을 변경할 때마다 코드에서 패딩을 다시 설정하는 것입니다.

+0

@michael 정답으로 표시해주세요. – Sufian

14

This과 비슷한 질문입니다.

짧은 대답은 다음과 같습니다 드로어 블은 9 패치 당김 수 있기 때문에 리셋되는 패딩

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

이유입니다.

+1

적절한 상태 집합을 사용하여 선택기를 사용하여 배경을 설정할 수도 있습니다. 그런 다음 패딩을 복원 할 필요가 없습니다. –

+0

@ ArkadiuszCieśliński. 케이스 및 필요에 따라 달라집니다. –

+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> 
관련 문제