读书人

Android解决获取控件Width和Height为0

发布时间: 2013-01-28 11:49:56 作者: rapoo

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;}@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设置监听器:

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

?

读书人网 >Android

热点推荐