android动态获取TextView的属性(width、height、line)
16lz
2021-01-25
Android动态获取TextView的属性(width、height、line)
在某些的androidUI设计中需要动态得到TextView、EditText的属性,比如宽度高度、行数等属性,这种类似的属性一般是在setText()过后才能得到的,当我们UI设计中需要这些属性时,则我们就得在绘制开始,或者绘制结束后得到属性,这时并没有显示在UI上。
在预绘制时得到属性:
ViewTreeObserver vto = textview.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { int height = textview.getMeasuredHeight(); int width = textview.getMeasuredWidth(); int line=textview.getLineCount(); /** *得到属性实现自己的操作 **/ return true; } });
在布局测绘完后得到属性
ViewTreeObserver vto2 = textview.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { /** *得到属性实现自己的操作 **/ } });
这两个动态接口可以用在ui的所有控件中。
observer 这是一个注册监听视图树的观察者(observer),在视图树种全局事件改变时得到通知。这个全局事件不仅还包括整个树的布局,从绘画过程开始,触摸模式的改变等。ViewTreeObserver不能够被应用程序实例化,因为它是由视图提供,参照getViewTreeObserver()以查看更多信息。
interface ViewTreeObserver.OnPreDrawListener当一个视图树将要绘制时,所要调用的回调函数的接口类。
interface ViewTreeObserver.OnGlobalLayoutListener当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类。
更多相关文章
- Android:style和theme
- Android中关于Task的一些认识
- TextView一行显示一个文字效果
- 《Android(安卓)Dev Guide》系列教程9:用户界面之声明布局
- Android视图动画
- 开发者指南-Android如何绘制View
- android事件拦截处理机制图解
- 【AndroidManifest.xml详解】Manifest属性之versionCode,version
- 2012-7-17 android:layout_weight