[英]Create dynamic number of layouts with contents by code in Android
在我的活動中,我想在水平方向上創建動態數量的線性布局(在附加的示例中,我嘗試在循環中創建 3 個水平布局,每個都包含一個文本和一個按鈕,並且應該在里面一個一個地顯示父垂直線性布局)
以下代碼給出了屏幕截圖中顯示的結果。 循環中的最后一個布局重寫所有其他布局
for(int kkk = 0; kkk < 4; kkk++) {
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
TextView textView = new TextView(this);
textView.setLayoutParams(textViewParams);
textView.setText("Text number" + kkk);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 42);
linearLayout.addView(textView);
LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
Button button = new Button(this);
button.setLayoutParams(buttonParams);
button.setText("Button!" + kkk);
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24);
linearLayout.addView(button);
setContentView(linearLayout);
}
我應該怎么做才能在循環中創建布局,如屏幕上帶有紅色標記的那樣?
您可以使用單行 UI 創建一個新的 XML。 並在 onClick 或方法調用時膨脹此 xml。
LayoutInflater layoutInflater =
(LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View addView = layoutInflater.inflate(R.layout.row, null);
text1 = (EditText) addView.findViewById(R.id.text1);
text2 = (EditText) addView.findViewById(R.id.text2);
使用循環,您正在創建所有這些布局,但是由於每次循環都有效,您將設置為內容視圖,因為循環的最后一個布局成為父布局和您的內容視圖。 在循環外,創建一個父布局並設置為內容視圖。 在循環內部,將其他布局添加到父布局。
LinearLayout parent = new LinearLayout(this);
parent.setOrientation(LinearLayout.VERTICAL);
for(int kkk = 0; kkk < 4; kkk++) {
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
TextView textView = new TextView(this);
textView.setLayoutParams(textViewParams);
textView.setText("Text number" + kkk);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 42);
linearLayout.addView(textView);
LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
Button button = new Button(this);
button.setLayoutParams(buttonParams);
button.setText("Button!" + kkk);
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24);
linearLayout.addView(button);
parent.addView(linearLayout);
}
setContentView(parent);
注意:循環將工作 4 次。 這意味着您將擁有 4 個相同的布局(以 0 開頭,以 3 結尾)。 如果你想要 3 個布局,你應該改變范圍。
for(int kkk = 0; kkk < 3; kkk++) {
}
或者
for(int kkk = 1; kkk < 4; kkk++){
}
編輯
如果我需要將 xml 中已經存在的布局設置為父級而不是創建,該怎么辦?
設置您的 xml,創建一個布局實例(您希望將您的子視圖添加到其中)並使用其 ID 查找,以便您可以將其與 Java 代碼一起使用。
setContentView(R.layout.activity_main);
LinearLayout parent = findViewById(R.id.idOfLayout);
for(int kkk = 0; kkk < 4; kkk++) {
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.setGravity(Gravity.CENTER);
...
parent.addView(linearLayout);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.