2012-09-03 32 views
4

我從中resizign LinearLayout的原始高度0有:變化的LinearLayout高度爲0編程

ViewGroup.LayoutParams params = getLayoutParams(); 
params.height = newHeight; 
requestLayout(); 

一切正常,除了newHeight = 0 - 佈局的高度變回原來的高度。我怎樣才能避免它?

如果newHeight == 0沒有幫助,則將可見性設置爲GONE

+0

你爲什麼rezise它爲0?你想隱藏它嗎? –

+0

我正在調整它的大小以處理拖放行爲。用戶在項目下滑動並隱藏在佈局上方。 – hsz

+1

params.height = 0?否則,view.GONE是隱藏事物的好方法。 – njzk2

回答

8

試試這個.....

LinearLayout layout = (LinearLayout)findViewById(R.id.yourLayoutId); 

LinearLayout.LayoutParams lp = (LayoutParams) layout.getLayoutParams(); 
lp.height = 0; 
+0

用id指定視圖效果很好,它可以設置'0'高度。謝謝 ! – hsz

+0

而且,如果我必須將其設置爲「match_parent」,那麼它如何完成? –

+0

lp.height = LayoutParams.MATCH_PARENT; –

0

難道你不需要使用setBaseAttributes()來設置高度paramsint height = ...將不會有任何影響params ...

+0

啊,我編輯了我的代碼 - 它應該是'params.height = newHeight'。抱歉。但問題仍然存在。 – hsz

0

你確定你得到的實際參數對象,而不是一個副本? 我會嘗試下面的代碼:

ViewGroup.LayoutParams params = getLayoutParams(); 
params.height = newHeight; 
setLayoutParams(params); 
requestLayout(); 
+0

如果你requestLayout,你可以從'getLayoutParams'修改參數。否則,你必須'setLayoutParams'。除了'0'值以外,它都可以正常工作。 – hsz

0

嘗試設置一個新的佈局params對象即可。這應該工作

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,0); 
layout.setLayoutParams(lp); 
+0

它也設置原始高度。如果我設置'1'而不是'0' - 高度很好地改變爲'1'。 – hsz

0
layout = (LinearLayout)findViewById(R.id.linearTop); 

layout.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;     
ViewGroup.LayoutParams params = layout.getLayoutParams(); 
params.height = ViewGroup.LayoutParams.WRAP_CONTENT; 
layout.setLayoutParams(params); 
+0

請添加如何解決用戶問題的說明。此外,請閱讀[如何回答](http://stackoverflow.com/help/how-to-answer) – Marusyk