2012-11-13 2 views
8

왜 이런 일이 일어 났는지 설명 할 수 있습니까?특정 배경 자원에서 여백이 작동하지 않습니다.

TextView를 확장하는 상당히 간단한 클래스가 있습니다. 배경색을 Color.BLUE로 설정하면 채우기가 올바르게 작동합니다. 백그라운드 리소스를 android.R.drawable.list_selector_background로 변경하면 더 이상 내 패딩이 적용되지 않습니다. 그게 뭐야? 여기

내 UI 클래스입니다 :

public class GhostDropDownOption extends TextView { 

    TextView text_view; 


    public GhostDropDownOption(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setup(context); 
    } 


    public GhostDropDownOption(Context context) { 
     super(context); 
     setup(context); 
    } 


    private void setup(Context context) { 
     this.setClickable(false); 
     // THE 2 LINES BELOW ARE THE ONLY THING I'M CHANGING 
     //this.setBackgroundResource(android.R.drawable.list_selector_background); 
     this.setBackgroundColor(Color.BLUE); 
    } 
} 

그리고이 같은 레이아웃을 사용하고 있습니다 :

<trioro.voyeur.ui.GhostDropDownOption 
    android:id="@+id/tv_dropdown_option_1" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" 
    android:gravity="center_vertical" 
    android:text="@string/request_control_dropdown_option_1" 
    android:textColor="#000000" 
    android:padding="10dip"/> 

을 그리고 이것은 배경 변화의 결과입니다 enter image description here

답변

11

전화 :

this.setBackgroundResource(android.R.drawable.list_selector_background); 

은 이전에 설정된 모든 패딩을 제거합니다 (9 패치 에셋에서 올바르게 작동하도록하기 위해).

과 같이 위의 줄 끝 코드에 패딩을 설정해보십시오 :

this.setPadding(PADDING_CONSTANT, PADDING_CONSTANT, PADDING_CONSTANT, PADDING_CONSTANT); 

그냥 setPadding에 전송 된 값을 찍어하지 픽셀에 있음을 기억!

+1

자세한 내용은 여기에서 확인할 수 있습니다. http://stackoverflow.com/questions/2886140/does-changing-the-background-also-change-the-padding-of-a-linearlayout – TofferJ

2

가능한 경우 배경 드로어 블을 XML로 설정해야합니다. 코드로 설정하면, XML로 설정 한 것보다는 드로어 블 리소스의 패딩을 사용합니다. 프로그래밍 방식으로 처리해야하는 경우에는 현재 패딩을 가져 와서 일시적으로 저장하고 배경을 설정하는 것이 좋습니다 그런 다음 @TofferJ가 제안하는대로 패딩을 다시 설정합니다.

이유는 9 패치 이미지의 경우 드로어 블 자체가 패딩을 가질 수 있기 때문입니다 (아래쪽 및 오른쪽 픽셀 경계가 패딩의 양을 정의 함).

귀하의 솔루션은 XML에 배경 자원을 설정하는 것 :

android:background="@android:drawable/list_selector_background"

내가 그건 당신이 첫번째 프로젝트로 복사해야합니다 개인 당김 자원이 될 수있다 생각하지만.

+1

감사합니다. 솔루션은 UI 클래스의 인스턴스를 몇 개만 사용하기 때문입니다. 내가 프로젝트에 복사 할 필요가 없다는 것을 알았습니다. 이 선은 앱이 설치된 모든 기기에서 기본 제공 드로어 블을 가져옵니다. – raydowe

관련 문제