一.概述:
在Android中怎么去获取View的宽高信息以及在什么时机才能够获取到正确的宽高信息是一个很重要的知识,我这里总结一下。
二.代码案例:
1.写一个TextView,然后分别在onCreate()、onCreate()中post之后、onResume()等分别去获取这个TextView的宽高。
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.text_view);
Log.i("1209","onCreate TextView的宽度为:"+mTextView.getMeasuredWidth());
Log.i("1209","onCreate TextView的高度为:"+mTextView.getMeasuredHeight());
mTextView.post(new Runnable() {
@Override
public void run() {
Log.i("1209","post TextView的宽度为:"+mTextView.getMeasuredWidth());
Log.i("1209","post TextView的高度为:"+mTextView.getMeasuredHeight());
}
});
}
@Override
protected void onResume() {
super.onResume();
Log.i("1209","onResume TextView的宽度为:"+mTextView.getMeasuredWidth());
Log.i("1209","onResume TextView的高度为:"+mTextView.getMeasuredHeight());
}
}
2.结果如下:
三.结论:
onCreate()、onResume()中都不能获取View的真实宽高,只有使用post之后才能拿到View的真实宽高。原因为:onCreate()、onResume()的时候,其实还没有走View的onMeasure()、onLayout()、onDraw()等,所以拿不到测量之后的宽高。