<Excerpt in index | 首页摘要>
Android获取TextView高度
<The rest of contents | 余下全文>
昨天碰到了要界面初始化获取TextView高度的问题.
总的来说,目前一共有三种方式获取:
##第一种:
1 2 3
| tv.getViewTreeObserver().addOnGlobalLayoutListener(() -> { int height = tv.getHeight(); });
|
这种是最准确的,但是同样有一个问题,如果你在初始化布局需要这个参数来做些什么的时候,就会出现卡顿现象.
##第二种:
1 2 3 4
| tv.getViewTreeObserver().addOnPreDrawListener(() -> { int height = tv.getHeight(); return; });
|
这个是比较折中的办法..
##第三种:
总有些情况是你意想不到的,我昨天就碰到的是这个情况.
获取高度必须在Act的onCreate方法中获取,并且不能通过回调,因为回调总是有一点点的延迟.
那就出现了这个扯淡的第三种(如果非必要,强烈不建议该方法,我是被逼的了.)
那就是自己计算!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int tvWidth = Utils.getScreenWidth() - DensityUtils.dp2px(this, 20);
int textSize = DensityUtils.sp2px(this, 14); int lineLength = tvWidth / textSize; int line = text.length() / lineLength; if(text.length() % lineLength > 0) line++;
line += stringCount(tagDesc, "\n");
int height = (line * DensityUtils.sp2px(this, 15)) + (DensityUtils.dp2px(this, 2) * line) + (paddingValue);
|
统计字符串出现次数
1 2 3 4 5 6 7 8 9 10 11 12 13
| public int stringCount(String str,String substr){ int count = 0; int str_len = str.length(); int substr_len = substr.length(); if (!str.contains(substr)) return count; for (int i = 0; i < str_len - substr_len; i++) { if (substr.equals(str.substring(i, i + substr_len))) { count++; } } return count; }
|
这里这些是不完善的,比如标点符号全部以中文的方式计算的,所以后面还需要优化!