如何在Oncreate中获取TextView的宽度?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Oncreate中获取TextView的宽度?相关的知识,希望对你有一定的参考价值。
有人知道在Oncreate中如何获取TextView的宽度吗?用textview.getwidth()和getMeasuredWidth()获取的都是0.我们都知道获取宽度要等页面布局完之后才能获取到?但有没有什么办法可以在Oncreate下获取到?因为本人在做一个项目,要知道每个view的宽度!有没有牛人知道怎么做啊,小弟感激不尽!!谢谢
参考技术A 在Oncreate中获取TextView的宽度在onCreate()里是获取不到控件的width,height的,这个时候控件都没有measure,layout完毕,所以获取到的结果都是0。要获取控件的宽度、高度必须在measure、layout过程完毕之后。
有2种方法:
1.如lss所讲的一样:
ViewTreeObserver vto = mBtnSend.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
@Override
public void onGlobalLayout()
int height = mBtnSend.getMeasuredHeight();
int width = mBtnSend.getMeasuredWidth();
System.out.println("height:" + height + " " + "width:" + width);
);
2.在Activity里重写方法
public void onWindowFocusChanged(boolean hasFocus);
在窗口第一次获得焦点的时候,肯定能获取到控件的width,height。 参考技术B oncreate的时候,view还没有初始化完, view的 onLayout 方法里才知道大小,所以你可以 override view的onLayout ,在那里获得宽高。 参考技术C 我找到解决方法了,请参考。LayoutParams tvPara = (LayoutParams) m_tv.getLayoutParams(); m_tv.requestLayout(); m_iTextWidth = tvPara.width; 参考技术D Add this to your activity's onCreateViewTreeObserver vto = layout.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() @Override public void onGlobalLayout() You should be able to get the width and height over here. layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); );
以上是关于如何在Oncreate中获取TextView的宽度?的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 中如何获取设置为 Wrap_Content 的 Textview 的宽度
Android在onCreate()方法中动态获取TextView控件的高度