android – 平铺的背景推动它的视图大小

android – 平铺的背景推动它的视图大小,第1张

概述我有一个平铺的位图,我正在使用作为View背景.这个视图,假设有 android:layout_height =“wrap_content”.问题是在后台使用的位图的高度参与视图的测量,增加了视图的高度.当视图的内容的大小小于用作图块背景的位图的高度时,可以注意到这一点. 让我给你一个例子.瓦片位图: 位图drawable(tile_bg.xml): <?xml version="1.0" enc 我有一个平铺的位图,我正在使用作为VIEw背景.这个视图,假设有 android:layout_height =“wrap_content”.问题是在后台使用的位图的高度参与视图的测量,增加了视图的高度.当视图的内容的大小小于用作图块背景的位图的高度时,可以注意到这一点.

让我给你一个例子.瓦片位图:

位图drawable(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>

它看起来像:

TextVIEw的高度最终是位图的高度.我期望的是,位图被剪切到视图的大小.

有没有办法实现这一点?

笔记:

>我不能使用9patch drawables,因为背景需要以瓦片方式重复,拉伸不是一个选择.
>我不能为VIEw设置一个固定的高度,这取决于孩子(我在VIEwGroup中使用它)
>这个奇怪的行为发生在我之前解释过,当视图的大小小于位图的大小时,否则位图被重复剪辑正确(即,如果视图大小是位图的大小的1.5倍,你结束看到位图的1.5倍).
>这个例子处理高度,但使用宽度是相同的.

解决方法 您需要一个自定义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中声明自定义的drawables,所以你必须实例化并设置textvIEw的背景:

@OverrIDepublic 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中删除background属性:

<TextVIEw    androID:ID="@+ID/textVIEw"    androID:layout_wIDth="fill_parent"    androID:layout_height="wrap_content"    androID:text="Testing testing testing"    androID:textcolor="#000000" />

我已经测试了,似乎工作.

总结

以上是内存溢出为你收集整理的android – 平铺的背景推动它的视图大小全部内容,希望文章能够帮你解决android – 平铺的背景推动它的视图大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1134220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存