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);
- }
- }
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
- // 这里能获取真实的高和宽
- }
- });
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
// 这里能获取真实的高和宽
}
});