大家都遇到过项目中需要获控件的的高度或者列如文章开头说TextView的行数 但是很多人在实际操作中getLineCount()获取到值是零,其实只是我们没在正确的位置获取。
这是因为activtiy的onCreate()时候view 还没渲染完成,和view的生命周期有关 在onCreate()设置contentview其实是用Pull解析XML绘出到activity上的 很多开发很久的人绝对对view 不陌生, 这里就不对view做详细说明 ,因为这说起来十几篇都说不完, 只要知道在onCreate()时候view只是在做控件的大小测量,和布局排版就可以了 ,具体绘制时间不定时 有可能onResume() 就完成了 有可能上个周期绘制完成 具体可去看下 《view的加载过程》一文。
那么问题来了 怎么解决上诉问题呢
方法一 :
那么就在onCreate()里开启异步操作,先上代码
tv_content.post(new Runnable() {
@Override
public void run() {
oldlines = tv_content.getLineCount();
}
});
通过此代码就可以等到绘制完成的接口回调
方法二:
自定义一个AsyncTask类 ,重写方法即可
privateclassMyOpenTask extendsAsyncTask<Integer, Integer, Integer> {
privateint[] location = newint[2];
@Override
protectedvoidonCancelled() {
super.onCancelled();
}
publicvoidstart() {
execute(0);
}
@Override
protectedInteger doInBackground(Integer... params) {
return1;
}
@Override
protectedvoidonPostExecute(Integer result) {
super.onPostExecute(result);
intlinecount = mVideoDescription.getLineCount();
//这里就可以拿到行数做判断 具体看你做什么操作了
}