TextView设置wrap_content时,使其宽高适应文字内容大小而不是适应background大小
2017-08-16 11:32
1936 查看
对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的大小就是适应文字内容时的大小
然后把背景图片设置回去,把得到的宽高值设置进去,就OK了
补充:
其实不止是TextView是这样,所有带background属性的View、ViewGroup都是如此
比如一个Layout设置了一个大图片为背景导致Layout大小被拉伸了,想要Layout的大小跟随其中的子控件而不是跟随background,也可以这样做
我发现androidSDK真的是有很多不完善的地方,我有印象的这是第三个了:ViewPager没有禁止滑动的API;TabLayout没有设置指示器宽度的API;TextView没有设置内容跟随文字不跟随background大小的API;
可能是考虑不周,测试不全造成的,现在就算更新API也没用,低版本的API都写死了,没法兼容,这也是Android和iOS相比的众多坑之一
有时我们需要这样的效果:如果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相比的众多坑之一
相关文章推荐
- 设置了背景图片的TextView,其尺寸设置为wrap_content时,并不是适应文字内容大小
- Android 中CheckBox设置background为一张图片并且宽高属性为wrap_content时图片被拉伸
- android布局--Android fill_parent、wrap_content和match_parent的区别 三个属性都用来适应视图的水平或垂直大小,一个以视图的内容或尺寸为基础的布局比精
- android布局的大小设置之一,.fill_paren、wrap_content 、match_parent
- ios开发点滴-UILable 根据文字内容进行大小设置 sizeThatFits和sizeToFit
- ios开发点滴-UILable 根据文字内容进行大小设置 sizeThatFits和sizeToFit
- ScrollView中嵌套的viewPager,viepager高度设置为wrap_content时内容不显示问题以及与scrollview冲突的解决方案
- Android开发库VUtils之文字大小自适应TextView
- 设置EditText的提示文字大小,监听输入框内容变化
- iOS开发:字符串设置指定内容的文字颜色、文字大小、文字字体类型
- UILable的设置使其内容适应屏幕的大小
- 将RecyclerView的宽高属性设置为“wrap_content”
- Android Studio App设置TextView文字内容大小颜色
- 【菜鸟学安卓】- TextView的文字大小 setTextSize 和 getTextSize 设置
- 安卓 View 设置宽高 wrap_content 属性无效的原因
- UIWebView 实现图片适应屏幕的宽度 文字内容的大小不变
- 直接继承View来自定义控件时,需要重写onMeasure()方法并设置wrap_content时的大小 原理分析
- 同一TextView 上的文字设置不同的颜色,大小等
- td 内容自动换行 table表格td设置宽度后文字太多自动换行
- 设置UIButton的文字显示位置、字体的大小、字体的颜色