2015-09-05 71 views
3

我想了解android的基礎知識,當我調用RelativeLayout.getWidth時,我將0作爲值而不是佈局的預期大小。當佈局寬度爲720時,RelativeLayout.getWidth返回0

我有一個RelativeLayout的填充我的屏幕:

<RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/activity_one> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="test" 
     android:id="@+id/test"/> 
    </RelativeLayout > 

但是當我使用下面的代碼在OnCreate(),我得到0而不是預期的屏幕寬度720

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_one); 

     RelativeLayout rl= (RelativeLayout) findViewById(R.id.activity_one); 

     TextView tempTextview = (TextView) findViewById(R.id.test); 

     tempTextview.setText("W: " + rl.getWidth() + " - H:" + rl.getHeight()); 
} 

我一定在做一個非常愚蠢的錯誤,但我看不到什麼。

+0

@Colin的確謝謝! - 我應該刪除這篇文章嗎? – Slamit

+0

答案和問題總是建立在 – Bhargav

回答

2

當您的UI已加載並且只能調用佈局的寬度時,您應該在此處獲取寬度:

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 

    super.onWindowFocusChanged(hasFocus); 
//paste your code to get your layout params. 
} 
+0

確實如上所述: http://stackoverflow.com/questions/3591784/getwidth-and-getheight-of-view-returns-0 謝謝:-) – Slamit

+0

我不'我知道它可以在http://developer.android.com/上找到,但我們在這裏只是爲了互相幫助,沒有其他的東西。 – Androider

0

你在調用getWidth()/ getHeight()太早。用戶界面尚未完全佈局和規模。

0

如果我沒有記錯,佈局元素的寬度&高度等變量在onCreate()方法後設置。 有一些類似的問題,並通過在應用程序的邏輯流程中的不同位置獲取高度/寬度來修復它們。

0

寬度沒有置位,直到onMeasure被調用(當尺寸都是實際測量哪個,並且此方法依次調用setMeasuredDimension)。

你可以得到特定的佈局ViewTreeObserver對象和實施ViewTreeObserver.OnDrawListener,並通過此實現觀測對象addOnDrawListener功能,

得到這個觀察者實現內部的高度和寬度,並更改任何其他視圖項你希望基於這些新值這種方式,即使佈局的高度和寬度在未來的花花公子中改變爲可能的方向改變,一切都保持一致?

viewTreeObserver對象中有很多其他事件只是找到一個適合您的需求併爲其編寫監聽器的事件。這裏是鏈接到ViewTreeObserver的文檔http://developer.android.com/reference/android/view/ViewTreeObserver.html

+0

超好的信息,謝謝你的鏈接!更多學習:)! – Slamit

+0

啊抱歉,沒有通知要刪除我的評論 – Bhargav