TextView设置wrap_content时,使其宽高适应文字内容大小而不是适应background大小
来源:互联网 发布:c语言从1加到100while 编辑:程序博客网 时间:2024/05/22 07:40
对TextView设置wrap_content时,通常情况下其大小跟随文字内容大小,但如果对其设置了background属性,并且background是一张宽高较大的图片(大小超过了文字内容大小),发现此时TextView就会拉伸到和background图片等同大小,
有时我们需要这样的效果:如果background的初始图片很大,我们需要使其自动适应文字内容大小,而不会把TextView撑得很大
搜集和试验找到的方法有:
用.9图做background资源;
用shape做bakcground资源;
(图片小了自然就不存在撑大的问题了,但是改图片增加了体力劳动,也不是从根本上解决问题)
我发现把TextView的宽高写死时图片是可以自动变小的
那么只要我知道它没有设置background时的宽高(这时TextView的宽高是适应文字内容大小时的宽高),就可以在设置background后把这个宽高写上去,就可以动态的实现TextView大小适应文字内容大小而不是适应图片大小了
但是怎么才能知道TextView适应文字内容时的宽高呢?
本来想用正途,测量文字大小来获取宽高...未果
用了一个笨方法:
/**
* textview设置wrap_content属性时,若background的内容过大,则textview的大小不跟随文字内容大小而跟随background大小
* <p>
* 若textview的background大小大于文字内容大小,该方法使textview的大小适应文字内容大小而不是适应background大小
*
* @param textView
*/
public static void setWrapContentOfText(TextView textView) {
Drawable drawable = textView.getBackground();
textView.setBackground(null);
textView.post(() -> {
int width = textView.getWidth();
int height = textView.getHeight();
textView.setBackground(drawable);
ViewGroup.LayoutParams layoutParams = textView.getLayoutParams();
layoutParams.width = width;
layoutParams.height = height;
});
}
流程就是,对设置了大图片作为background的TextView,先把background设置为空,这个时候TextView的大小就是适应文字内容时的大小
有时我们需要这样的效果:如果background的初始图片很大,我们需要使其自动适应文字内容大小,而不会把TextView撑得很大
搜集和试验找到的方法有:
用.9图做background资源;
用shape做bakcground资源;
(图片小了自然就不存在撑大的问题了,但是改图片增加了体力劳动,也不是从根本上解决问题)
我发现把TextView的宽高写死时图片是可以自动变小的
那么只要我知道它没有设置background时的宽高(这时TextView的宽高是适应文字内容大小时的宽高),就可以在设置background后把这个宽高写上去,就可以动态的实现TextView大小适应文字内容大小而不是适应图片大小了
但是怎么才能知道TextView适应文字内容时的宽高呢?
本来想用正途,测量文字大小来获取宽高...未果
用了一个笨方法:
/**
* textview设置wrap_content属性时,若background的内容过大,则textview的大小不跟随文字内容大小而跟随background大小
* <p>
* 若textview的background大小大于文字内容大小,该方法使textview的大小适应文字内容大小而不是适应background大小
*
* @param textView
*/
public static void setWrapContentOfText(TextView textView) {
Drawable drawable = textView.getBackground();
textView.setBackground(null);
textView.post(() -> {
int width = textView.getWidth();
int height = textView.getHeight();
textView.setBackground(drawable);
ViewGroup.LayoutParams layoutParams = textView.getLayoutParams();
layoutParams.width = width;
layoutParams.height = height;
});
}
流程就是,对设置了大图片作为background的TextView,先把background设置为空,这个时候TextView的大小就是适应文字内容时的大小
然后把背景图片设置回去,把得到的宽高值设置进去,就OK了
补充:
public static void setWrapContentNotOfBackground(View view) { Drawable drawable = view.getBackground(); view.setBackground(null); view.post(() -> { int width = view.getWidth(); int height = view.getHeight(); view.setBackground(drawable); ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = width; layoutParams.height = height; });}其实不止是TextView是这样,所有带background属性的View、ViewGroup都是如此
比如一个Layout设置了一个大图片为背景导致Layout大小被拉伸了,想要Layout的大小跟随其中的子控件而不是跟随background,也可以这样做
我发现androidSDK真的是有很多不完善的地方,我有印象的这是第三个了:ViewPager没有禁止滑动的API;TabLayout没有设置指示器宽度的API;TextView没有设置内容跟随文字不跟随background大小的API;
可能是考虑不周,测试不全造成的,现在就算更新API也没用,低版本的API都写死了,没法兼容,这也是Android和iOS相比的众多坑之一
阅读全文
0 0
- TextView设置wrap_content时,使其宽高适应文字内容大小而不是适应background大小
- 设置了背景图片的TextView,其尺寸设置为wrap_content时,并不是适应文字内容大小
- UILable的设置使其内容适应屏幕的大小
- textarea自动适应内容大小
- UITextView根据内容适应大小
- QTextEdit 适应内容调整大小
- 使其适应相应的iphone大小展示
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- 调整文本框大小以适应内容
- 如何使IFrame的长宽与内容自动适应大小
- [转]如何使IFrame的长宽与内容自动适应大小
- 如何使IFrame的长宽与内容自动适应大小
- 如何使IFrame的长宽与内容自动适应大小
- 如何使IFrame的长宽与内容自动适应大小
- 如何使IFrame的长宽与内容自动适应大小
- 如何使IFrame的长宽与内容自动适应大小
- 如何使IFrame的长宽与内容自动适应大小
- android camera2
- Activiti5工作流(一)
- String的两种实例化方法的区别
- HTML5 Boilerplate
- petalinux(-)自动登录及启动配置
- TextView设置wrap_content时,使其宽高适应文字内容大小而不是适应background大小
- 分布式搜索elasticsearch配置文件详解
- 安卓视线可锁定首行和首列的表格视图
- javascript利用selected属性实现省市区三级联动
- tf.train.SummaryWriter()
- 多线程编程的10个例子
- css css编写三角形
- Count the string
- 【Hibernate】(二)核心对象