android view.getWidth(), view.getHeight() 返回0的問題的解決方案


android開發中有很多時候需要獲取view的寬高尺寸。Android中提供了View.getWidth()和View.getHeight()兩個方法。但是初學者發現調用這兩個方法的返回結果經常為0.這是因為在onCreate(), onResume()方法中調用View.getWidth()方法的時候,這個view還沒有繪制。那么怎么正確地得到view的尺寸呢?簡單羅列下解決方法。

    首先說一個很不靠譜的方案,就是延時個幾百毫秒等界面加載出來之后再獲取view的尺寸。

    在上面的最不靠譜方案的基礎上,一個比較好的方案是在Activity的onWindowFocusChanged(boolean hasFocus)方法中獲取view的尺寸。因為這個方法是在window焦點狀態變化的時候調用的,此時view已經繪制完畢,可以得到正確的view的尺寸數據。

    但是在onWindowFocusChanged方法中獲取view尺寸的方式始終讓我覺得不是很舒服。最后說一下自己認為的最好的獲取view尺寸的方案。就是將獲取view尺寸的操作post到ui線程中去執行。比如在onCreate方法中:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mView = findViewById(R.id.textview);
        mView.post(new Runnable() {
            @Override
            public void run() {
                int viewWidth = mView.getWidth();
                int viewHeight = mView.getHeight();
                Log.d(TAG, "viewWidth:" + viewWidth + "\nviewHeight:" + viewHeight);
            }
        });
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM