设置了背景图片的TextView,其尺寸设置为wrap_content时,并不是适应文字内容大小

我们在做一些聊天对话框的界面设计时,经常会涉及到要写一个 包含了对话框背景的TextView,一般来说 控件的宽高是使用wrap_content属性

这个TextView背景设置为名为duihuakuang的图片
<TextView
            android:id="@+id/tv_chatting_my_msg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="对话内容"
            android:background="@drawable/duihuakuang"
            android:textColor="@color/white"/>

这时,图片尺寸稍大,而文字内容不多,效果如下:



可以说是非常丑,没有任何一个软件的对话框 会设计成这样,一开始我很奇怪 为什么明明TextView的尺寸是wrap_content,但是控件的大小却不是适应文字内容呢?

折腾了一下,终于发现,这个wrap_content,字面意思就是 包含内容——也就是控件大小 适应内容的尺寸——而这个内容 不仅仅是指文字,android:background属性也会影响控件大小。

就这个例子来说,这个TextView的背景设置了一个对话框图片,同时也包含了“对话内容”四个字。那么 这个wrap_content 究竟是包含谁的大小呢?——答案就是 都要包含,无论是TextView的背景图片 还是TextView显示的文字内容都要包含在这个控件中。所以就出现了如果你的背景图片过大,那么TextView可能就 除了包含文字以外,还会因为你的背景图片过大而留出了大量空白,十分难看。


那么怎么办呢?

个人总结三个办法:

1)编写一个shape作为TextView背景

2)找一张尽可能小的背景图片(必须是.9.png格式,否则可能因为文字内容过多,导致 背景图片被拉伸而失真)



ps: 1)方法就是在你的工程中的res/drawable目录下,用代码"画“图,同时局限性也很大,只能实现一些规则形状的简单图形,具体方法网上有大量资料


具体代码示例如下:

Activity布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="对话内容"
        android:background="@drawable/message_me"/>  这里使用小图片作为背景 ,达到了 对话框的大小能够自适应 文字内容

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="对话内容"
        android:background="@drawable/duihuakuang"/>   这里使用大图片作为背景


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="对话内容"
        android:layout_marginTop="10dp"
        android:background="@drawable/background"/>    这里使用shape作为背景

</LinearLayout>


shape的代码:

background

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners
        android:radius="10dp"/>
    <stroke
        android:color="@color/blue_light_2"
        android:width="1dp"/>
    <solid
        android:color="@color/white"/>
</shape>

真机截图:


博客内容很简单,可是我相信应该有不少和我一样的新手遇到这个困扰,希望可以帮助到大家^ ^

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值