您的位置:首页 > 移动开发 > Android开发

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了

补充:

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相比的众多坑之一
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android textview
相关文章推荐