0

底部對齊比方說,我有一個自定義的RelativeLayout其覆蓋onMeasure:自定義的RelativeLayout

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    setMeasuredDimension(200, 200); 
} 

現在,我想添加到這個佈局視圖,與此自定義的RelativeLayout的底部對齊。但我嘗試不同的事情沒有任何結果:

paramsButton.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); 
addView (mButton, paramsButton); 

我的第一個猜測是對準父母底部(這應該是正確的RelativeLayout定製?)。但很顯然,它與我的自定義佈局的父(這是另一個RelativeLayout的,而不是定製這段時間對齊

於是,我就用ID一致:

paramsButton.addRule(RelativeLayout.ALIGN_BOTTOM, getId()); 
addView (mButton, paramsButton); 

,但它不工作或者(按鈕消失) 注:我把我的自定義的RelativeLayout的id明確檢查的android沒有得到正確的ID

你有任何想法如何使這項工作

編輯? : 有趣的事:它具有以下規則

paramsButton.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); 
addView (mButton, paramsButton); 

所以我不得不說,我真的不明白,爲什麼

RelativeLayout.ALIGN_PARENT_BOTTOM

規則很好地工作不工作...

回答

5

您的方法覆蓋onMeasure是有缺陷的。在這種情況下,佈局測量它的孩子(並且他們存儲他們的大小),然後你只告訴佈局(而不是孩子)你實際上改變了主意,並且想要改變這個尺寸。

相反,請嘗試以下操作:

widthMeasureSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY); 
heightMeasureSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY); 
super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

一般來說,投入大小的代碼是不是一個好主意。相反,請考慮使用具有固定大小的layout_width和layout_height的樣式,或者至少使用<dimen>資源。

+0

感謝您的回答!我會盡量在今天晚些時候完成這項工作,並且向您報告! 關於代碼的大小:這只是爲了演示的目的;) – Aleks 2013-04-09 06:44:52

+0

它會認真工作.... 我很接近發現有什麼東西在重寫onMeasure時出錯,但嚴重不知道該怎麼做。 .. @delyan你能告訴我一些來自哪裏我可以有一些關於這方面的知識.......... 因爲這對我來說完全是陌生的,但是你的回答清楚地表明你已經清楚地瞭解事實 – DeltaCap 2013-04-12 05:07:52

+0

@AbhinavRathore,請確保你瞭解[this]上的所有內容(http://developer.android.com/guide/topics /ui/how-android-draws.html)頁面。之後,嘗試閱讀並理解代碼,以獲得像FrameLayout這樣的簡單代碼。然後,玩它。 :) – Delyan 2013-04-12 07:07:10

0

您是否嘗試將另一個RelativeLayout/LinearLayout或任何其他佈局/ Wi在按鈕上方的dget並將其layout_weight設置爲1?通過設置layout_weight,它將使按鈕上方的小部件僅佔用此自定義RelativeLayout內的剩餘空間。

+0

這可能是一個解決方法,但如果我能理解真正的問題,那將是件好事。 – Aleks 2013-04-07 10:17:15

相關問題