2015-08-20 44 views
0

預先感謝您的幫助。TextView未出現,Android

我想將一個垂直加權的TextView對象添加到LinearLayout。

//root container 
LinearLayout rootContainer = new LinearLayout(activity); 
rootContainer.setOrientation(LinearLayout.HORIZONTAL); 
rootContainer.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 
      LayoutParams.MATCH_PARENT,1f)); 
rootContainer.setBackgroundColor(Color.parseColor("#000000")); 

//Text View 
TextView instructions = new TextView(activity); 
instructions.setLayoutParams(new LinearLayout.LayoutParams(0, 
      LayoutParams.MATCH_PARENT,.7f)); 
instructions.setText(survey.instructions); 
instructions.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); 
instructions.setBackgroundColor(Color.RED); 
rootContainer.addView(instructions); 

當我使用上面的代碼時,我得到一個空白屏幕。但是,如果我註釋掉

instructions.setLayoutParams(new LinearLayout.LayoutParams(0, 
      LayoutParams.MATCH_PARENT,.7f)); 

TextView出現(雖然不是我想要的大小)。

從我見過的所有東西中,這是生成加權TextView(垂直加大屏幕大小)的方法。我究竟做錯了什麼?

+0

如果你使用 'instructions.setLayoutParams(新LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT,.7f));' –

+0

問題解決了。雖然我不完全確定爲什麼。如果你可以給出答案並解釋爲什麼這個工作,我會接受它。 – HXSP1947

+0

是我所做的沒有工作的原因,因爲我用0而不是0dp就像我可能有,如果我在xml中做到這一點? – HXSP1947

回答

1

只需更換你有什麼用此:

instructions.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 0.7f)); 

爲什麼沒有在應用程序啓動時顯示的原因是因爲在java代碼定義一個視圖時,其與像素定義它,所以當你的寬度設置爲0,它肯定會隱形。它不同於在xml佈局文件中定義它。

希望有所幫助。

+0

我認爲這個答案是錯誤的,請參閱下面的答案。 –

0

代碼

instructions.setLayoutParams(new LinearLayout.LayoutParams(0, 
     LayoutParams.MATCH_PARENT,.7f)); 

設置你的文本視圖0的寬度意味着它不會被視爲嘗試更換0一些價值觀或LayoutParams.WRAP_CONTENT

0

我認爲在這個問題上接受的答案是錯誤的。 爲什麼這不工作的原因是因爲LinearLayoutvertical方向設置,而在TextViewwidth重構建:

instructions.setLayoutParams(new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT,.7f)); 

它應該是:

instructions.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, .7f)); 

而且由於TextView是LinearLayout的唯一子項,因此爲了達到70%的比例,weightSum屬性應該已設置爲1:

rootContainer.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,    ViewGroup.LayoutParams.MATCH_PARENT)); 
rootContainer.setWeightSum(1); 
+0

我有兩個LinearLayouts,我複製了錯誤的一個。我已經糾正了這一點。 – HXSP1947

+0

在這種情況下,請保存'instructions.setLayoutParams(新的LinearLayout.LayoutParams(0,LayoutParams.MATCH_PARENT,.7f))',但您仍然需要最後一點:不要在'LinearLayout'上設置'weight',但將'weightSum'設置爲1,這樣'TextView'就佔了父項的70%。這應該解決它。 –

+0

我沒有發佈我的所有代碼。它不是我添加到父項中的唯一孩子。你正在閱讀的方式太多了。我接受了我所做的答案,因爲它解決了我的問題。你所建議的正是沒有用的東西。 – HXSP1947