簡體   English   中英

通過 Android 中的代碼創建具有內容的動態布局數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM