2012-01-12 5 views
10

타일 배경이 View입니다. 이 Viewandroid:layout_height="wrap_content"입니다. 문제는 백그라운드에서 사용되는 비트 맵의 ​​높이가 뷰의 측정에 참여하고 높이가 View으로 증가한다는 것입니다. View의 내용 크기가 타일 배경으로 사용 된 비트 맵의 ​​높이보다 작은 경우이를 알 수 있습니다.배경이 바둑판 식으로 배열되어 있습니다.보기 크기

예제를 보여 드리겠습니다. 타일 ​​비트 맵 :

enter image description here

비트 맵 드로어 블 (tile_bg.xml) :

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/tile" 
    android:tileMode="repeat"/> 

레이아웃 : 보이는 방법

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="#FFFFFF"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/tile_bg" 
     android:text="@string/hello" 
     android:textColor="#000000" /> 

</LinearLayout> 

같은 :

enter image description here

TextView의 높이가 비트 맵의 ​​높이가됩니다. 내가 예상 한 바는 비트 맵이 View의 크기로 잘립니다.

이것을 달성 할 방법이 있습니까?

참고 : 배경 스트레칭, 타일 패션 방법으로 반복 될 필요가 있기 때문에 내가 드로어 블을 9patch 사용할 수 없습니다

  • 옵션을 선택하지 않습니다.
  • 나는 내가 View의 크기보다 작은 경우 이전에 설명 된 바와 같이이 이상한 행동이 발생
  • (나는 ViewGroup이 사용하고)는 자녀의 의존의 View에 대한 고정 높이를 설정할 수 없습니다 비트 맵의 ​​크기. 그렇지 않으면 비트 맵이 올바르게 잘립니다. 즉,보기 크기가 비트 맵 크기의 1.5 배인 경우 비트 맵의 ​​1.5 배가됩니다.
  • 이 예에서는 높이를 처리하지만 너비는 동일합니다.

답변

14

getMinimumHeight() 및 getMinimumWidth()에서 0을 반환하는 사용자 정의 BitmapDrawable이 필요합니다. 여기에 일을 내가 BitmapDrawableNoMinimumSize라는 이름의 한 일이다 :

인스턴스화하고 thusly 히 텍스트 뷰의 배경을 설정해야합니다 있도록 (AFAIK)은 XML로 정의 드로어 블을 선언 할 수 없습니다 물론
import android.content.res.Resources; 
import android.graphics.drawable.BitmapDrawable; 

public class BitmapDrawableNoMinimumSize extends BitmapDrawable { 

    public BitmapDrawableNoMinimumSize(Resources res, int resId) { 
     super(res, ((BitmapDrawable)res.getDrawable(resId)).getBitmap()); 
    } 

    @Override 
    public int getMinimumHeight() { 
     return 0; 
    } 
    @Override 
    public int getMinimumWidth() { 
     return 0; 
    } 
} 

:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    BitmapDrawable bmpd =new BitmapDrawableNoMinimumSize(getResources(), R.drawable.tile); 
    bmpd.setTileModeX(TileMode.REPEAT); 
    bmpd.setTileModeY(TileMode.REPEAT); 
    findViewById(R.id.textView).setBackgroundDrawable(bmpd); 
} 

물론 당신은 레이아웃 XML에서 배경 속성 제거 :이 테스트 한

<TextView 
    android:id="@+id/textView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Testing testing testing" 
    android:textColor="#000000" /> 

을하고 작동하는 것 같다.

+0

우수 답변, 감사합니다. – aromero

관련 문제