我正在尝试动态调整我的textview,但getlinecount()方法总是在settext()和invalidate()之后返回0.我正在使用以下代码:
if (convertView == null) {
convertView = lInflater.inflate(R.layout.listview, null);
holder = new ViewHolder();
holder.text2 = (TextView)convertView.findViewById(R.id.TextView02);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.text2.setText(arr2[position]);
holder.text2.invalidate();
int lineCnt = holder.text2.getLineCount();
Run Code Online (Sandbox Code Playgroud)
holder是一个静态类,如下所示:
static class ViewHolder {
TextView text2;
}
Run Code Online (Sandbox Code Playgroud)
holder包含非null text2,内容集也为非null.
有人可以帮忙吗?
Thanx提前.
Sco*_*ott 75
我知道这个问题已经很老了,但是如果有人来这里寻找实际的答案:
holder.text2.setText(arr2[position]);
holder.text2.post(new Runnable() {
@Override
public void run() {
int lineCnt = holder.text2.getLineCount();
// Perform any actions you want based on the line count here.
}
});
Run Code Online (Sandbox Code Playgroud)
Nat*_*tiv 21
要解决此问题,请应用以下行:
textView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (textView.getLineCount() > 1) {
textView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
});
Run Code Online (Sandbox Code Playgroud)
该OnGlobalLayoutListener会每次更改后的调用TextView(测量它,它拉..后).在这里,你可以TextView在它被吸引到屏幕之前捕捉你的变化,并用它做你需要的任何事情.
代码中的最后一行是删除侦听器,这很重要,因为我们不想继续捕获每个布局更改.
Nim*_*a K 19
它应该在UI Thread by post方法上完成.
textView.post(new Runnable() {
@Override
public void run() {
Log.v("Line count: ", textView.getLineCount()+"");
}
});
Run Code Online (Sandbox Code Playgroud)
只有布局通过后,getLineCount()才能为您提供正确的行数.这意味着TextView必须至少绘制一次.我假设在这个时间点你的Textview没有被绘制,因此你得到0作为行数
| 归档时间: |
|
| 查看次数: |
24012 次 |
| 最近记录: |