Android UI绘制完成的标志及如何合理地获取屏幕的宽高

来源:互联网 发布:ubuntu安装hadoop 编辑:程序博客网 时间:2024/05/18 04:09

当我们需要获取屏幕的宽高时,一般情况是不能再onCreate和onResume方法中获取的,因为这个时候界面还没有绘制完成,大部分情况下获取到的都是0。

这里有两个解决方法:

一个是重写Activity中的onWindowFocusChanged方法,在onWindowFocusChanged方法中获取,参数hasFocus为true时表示当前Activity获取到了焦点。

    @Override    public void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);        if (hasFocus) {            Display display = getWindowManager().getDefaultDisplay();            DisplayMetrics metrics = new DisplayMetrics();            display.getMetrics(metrics);            int width = metrics.widthPixels;            int height = metrics.heightPixels;            Log.i(TAG, "onWindowFocusChanged: " + width + height);        }    }
问题在于,当前Activity获取到焦点(HasFocus为true)和失去焦点(HasFocus为false)的时候就会执行这个方法,比如下拉通知栏等,会带来一些问题。


另一个就是在onCreate和onResume里使用Handler.postDelay方法了。

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_empty);        Handler handler = new Handler();        handler.postDelayed(new Runnable() {            @Override            public void run() {                Display display = getWindowManager().getDefaultDisplay();                DisplayMetrics metrics = new DisplayMetrics();                display.getMetrics(metrics);                int width = metrics.widthPixels;                int height = metrics.heightPixels;                Log.i(TAG, "onWindowFocusChanged: " + width + height);            }        }, 500);    }







原创粉丝点击