Android解决获取控件Width和Height为0的问题
16lz
2021-01-26
Android在onCreate方法中调用View的getWidth和getHeight时返回的结果是0,因为此时控件还没有Draw出来,所以长和宽都是0。
如果想得到Width和Height,可以对View进行监听:
首先需要重写View的onSizeChange方法,加入监听回调函数:
Java代码- public class MyTextView extends TextView {
- public MyTextView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- // TODO Auto-generated constructor stub
- }
- public MyTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- }
- public MyTextView(Context context) {
- super(context);
- // TODO Auto-generated constructor stub
- }
- SizeChangeListener l;
- public void setSizeChangeListener(SizeChangeListener orlExt) {
- l = orlExt;
- }
- @Override
- public void onSizeChanged(int w, int h, int oldw, int oldh) {
- // TODO Auto-generated method stub
- l.sizeChanged(w, h, oldw, oldh);
- super.onSizeChanged(w, h, oldw, oldh);
- }
- public interface SizeChangeListener {
- public void sizeChanged(int w, int h, int oldw, int oldh);
- }
- }
public class MyTextView extends TextView {public MyTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public MyTextView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public MyTextView(Context context) {super(context);// TODO Auto-generated constructor stub}SizeChangeListener l;public void setSizeChangeListener(SizeChangeListener orlExt) {l = orlExt;}@Overridepublic void onSizeChanged(int w, int h, int oldw, int oldh) {// TODO Auto-generated method stubl.sizeChanged(w, h, oldw, oldh);super.onSizeChanged(w, h, oldw, oldh);}public interface SizeChangeListener {public void sizeChanged(int w, int h, int oldw, int oldh);}}
然后在Activity中对View设置监听器:
Java代码- tv_front = new MyTextView(this);
- tv_front.setBackgroundResource(R.drawable.slidebar);
- tv_front.setTextColor(Color.BLACK);
- tv_front.setText("要闻");
- tv_front.setGravity(Gravity.CENTER);
- tv_front.setTextSize(16);
- //监听textview尺寸改变
- tv_front.setSizeChangeListener(new SizeChangeListener() {
- @Override
- public void sizeChanged(int w, int h, int oldw, int oldh) {
- // TODO Auto-generated method stub
- // 这里能获取真实的高和宽
- }
- });
tv_front = new MyTextView(this);tv_front.setBackgroundResource(R.drawable.slidebar);tv_front.setTextColor(Color.BLACK);tv_front.setText("要闻");tv_front.setGravity(Gravity.CENTER);tv_front.setTextSize(16);//监听textview尺寸改变tv_front.setSizeChangeListener(new SizeChangeListener() {@Overridepublic void sizeChanged(int w, int h, int oldw, int oldh) {// TODO Auto-generated method stub // 这里能获取真实的高和宽}});
转载于:https://www.cnblogs.com/shhaoran/archive/2013/02/07/2924504.html
更多相关文章
- android 检测 Home 键
- Android:Click,LongClick,Touch,KeyDown,KeyUp事件使用心得
- Android中获取图片尺寸大小两种方法
- Android(安卓)自定义SeekBar(滑块跟随进度条移动)
- Android(安卓)监听主进程被杀
- Android实现高斯模糊(也叫毛玻璃效果)
- Android实践 -- 监听外置sdcard(TF卡)的插拔事件
- Android触摸事件分发之View篇
- Android开发重修