Android在onCreate方法中调用View的getWidth和getHeight时返回的结果是0,因为此时控件还没有Draw出来,所以长和宽都是0。

如果想得到Width和Height,可以对View进行监听:

首先需要重写View的onSizeChange方法,加入监听回调函数:

Java代码
  1. public class MyTextView extends TextView {
  2. public MyTextView(Context context, AttributeSet attrs, int defStyle) {
  3. super(context, attrs, defStyle);
  4. // TODO Auto-generated constructor stub
  5. }
  6. public MyTextView(Context context, AttributeSet attrs) {
  7. super(context, attrs);
  8. // TODO Auto-generated constructor stub
  9. }
  10. public MyTextView(Context context) {
  11. super(context);
  12. // TODO Auto-generated constructor stub
  13. }
  14. SizeChangeListener l;
  15. public void setSizeChangeListener(SizeChangeListener orlExt) {
  16. l = orlExt;
  17. }
  18. @Override
  19. public void onSizeChanged(int w, int h, int oldw, int oldh) {
  20. // TODO Auto-generated method stub
  21. l.sizeChanged(w, h, oldw, oldh);
  22. super.onSizeChanged(w, h, oldw, oldh);
  23. }
  24. public interface SizeChangeListener {
  25. public void sizeChanged(int w, int h, int oldw, int oldh);
  26. }
  27. }
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代码
  1. tv_front = new MyTextView(this);
  2. tv_front.setBackgroundResource(R.drawable.slidebar);
  3. tv_front.setTextColor(Color.BLACK);
  4. tv_front.setText("要闻");
  5. tv_front.setGravity(Gravity.CENTER);
  6. tv_front.setTextSize(16);
  7. //监听textview尺寸改变
  8. tv_front.setSizeChangeListener(new SizeChangeListener() {
  9. @Override
  10. public void sizeChanged(int w, int h, int oldw, int oldh) {
  11. // TODO Auto-generated method stub
  12. // 这里能获取真实的高和宽
  13. }
  14. });
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

更多相关文章

  1. android 检测 Home 键
  2. Android:Click,LongClick,Touch,KeyDown,KeyUp事件使用心得
  3. Android中获取图片尺寸大小两种方法
  4. Android(安卓)自定义SeekBar(滑块跟随进度条移动)
  5. Android(安卓)监听主进程被杀
  6. Android实现高斯模糊(也叫毛玻璃效果)
  7. Android实践 -- 监听外置sdcard(TF卡)的插拔事件
  8. Android触摸事件分发之View篇
  9. Android开发重修

随机推荐

  1. Android(安卓)使用AgentWeb库轻量级H5混
  2. AsyncTask不同版本线程池的区别
  3. Android(安卓)Native性能测试方法
  4. INSTALL FAILED CONFLICTING PROVIDER
  5. Android(安卓)开发中屏蔽物理键盘
  6. Android(安卓)Studio 编译下载Gradle卡住
  7. flutter中实现仿Android端的onResume和on
  8. Android(安卓)Studio Checkout GitHub Er
  9. Android(安卓)DataBing详解
  10. android广播的应用