Android编程获取控件宽和高的方法总结分析

2019-12-10 19:27:56刘景俊

接着来看下面几种方式输出结果:

把测试Activity改成如下:

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  final ImageView imageView = (ImageView) findViewById(R.id.imageview);
//-----------------------------------------------方法二
  ViewTreeObserver vto = imageView.getViewTreeObserver();
  vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    public boolean onPreDraw() {
      int height = imageView.getMeasuredHeight();
      int width = imageView.getMeasuredWidth();
      textView.append("n"+height+","+width);
      return true;
    }
  });
}

结果如下:

Android编程获取控件宽和高的方法总结分析

方法三就不再测试了同方法二!!!

那么方法而和方法三在执行上有什么区别呢?

我们在布局文件中加入一个TextView来记录这个控件的宽高.

<ScrollView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" >
  <TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</ScrollView>

先来测试方法二:

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  final ImageView imageView = (ImageView) findViewById(R.id.imageview);
//-----------------------------------------------方法二
  ViewTreeObserver vto = imageView.getViewTreeObserver();
  vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    public boolean onPreDraw() {
      int height = imageView.getMeasuredHeight();
      int width = imageView.getMeasuredWidth();
      textView.append("n"+height+","+width);
      return true;
    }
  });
}