2013-11-29 123 views
1

此代碼用於顯示contentview的寬度和高度,代碼在onCreate()方法中調用setContentView()方法之後運行,但它的結果寬度爲零和零高度。但是,contentview在屏幕上打開,並且對於寬度或高度都不爲0。這裏出現了什麼問題,以及如何顯示contentview的寬度和高度?contentView返回0的寬度和高度

contentview對象不是null,我使用了toString()語句來檢查。

如果這不好,那麼有沒有更好的方式來獲得像素的contentView的高度和寬度?

ViewGroup contentViewObj; 
    View v; 

    ... 

@Override 
    public void onContentChanged() { 
     // TODO Auto-generated method stub 
     super.onContentChanged(); 

     //v = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content); 
     v = (View) getWindow().getDecorView().findViewById(android.R.id.content); 

      Toast.makeText(MainActivity.this, "width of contentview " + v.getWidth() 
        + " " + "height of contentView " + v.getHeight(), Toast.LENGTH_SHORT).show(); 
    } 

回答

1

您得到0的原因是因爲視圖尚未測量。要獲得佈局的大小,您應該使用getWidth()getMeasuredWidth()方法。然而,這些方法不會給你一個有意義的答案,直到視圖被測量。在這裏閱讀關於how android draws views

您可以通過將onWindowFocusChanged()重寫爲mentioned in this thread來獲得正確的大小。

或者,你可以這樣做:

@Override 
public void onContentChanged() { 
    super.onContentChanged(); 

    v = (View) getWindow().getDecorView().findViewById(android.R.id.content); 

    v.post(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(MainActivity.this, "width of contentview " + v.getWidth() 
        + " " + "height of contentView " + v.getHeight(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
1

你需要等待,以便形成/完全開放,那麼你將得到這些values.Currently發生的事情是,你的觀點是目前形成所以這就是爲什麼它是未來0。你需要把一些定時器或處理程序,以便此代碼將在您的視圖形成後2,3秒後運行

相關問題