我有一个平铺的位图,我将其用作View
背景。例如,View
android:layout_height="wrap_content"
有View
。问题是背景中使用的位图的高度参与了视图的测量,增加了View
高度。当tile_bg.xml
的内容的大小小于用作图块背景的位图的高度时,可以注意到这一点。
让我举个例子。 tile位图:
位图drawable(<?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>
布局:
TextView
它看起来如何:
View
的高度最终是位图的高度。我期待的是位图被裁剪为View
的大小。
有没有办法实现这个目标?
注意:
ViewGroup
设置固定的高度,这取决于孩子们(我在View
中使用此内容)答案 0 :(得分:14)
您需要一个自定义BitmapDrawable,它从getMinimumHeight()和getMinimumWidth()返回0。这是一个我命名为BitmapDrawableNoMinimumSize的工作:
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;
}
}
当然你不能(AFAIK)用XML声明自定义drawable,所以你必须实例化并设置textview的背景:
@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" />
我已经对此进行了测试,似乎有效。