我们在做一些聊天对话框的界面设计时,经常会涉及到要写一个 包含了对话框背景的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>
真机截图:
博客内容很简单,可是我相信应该有不少和我一样的新手遇到这个困扰,希望可以帮助到大家^ ^