Android解决获取控件Width和Height为0的有关问题
Android解决获取控件Width和Height为0的问题
Android在onCreate方法中调用View的getWidth和getHeight时返回的结果是0,因为此时控件还没有Draw出来,所以长和宽都是0。
如果想得到Width和Height,可以对View进行监听:
首先需要重写View的onSizeChange方法,加入监听回调函数:
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); } }
然后在Activity中对View设置监听器:
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 // 这里能获取真实的高和宽 } });