重复LinearLayout略有变化

时间:2017-10-20 15:48:49

标签: java android android-layout android-xml

我有一个垂直的LinearLayout,我想用水平LinearLayouts(它像行一样)填充。这些中的每一个都应该是有效的,除了它们中的几个项目使用一个数字,每次都会增加。

例如:

<LinearLayout android:id="@+id/row1" >
    <SeekBar
        android:id="@+id/seekBar"
        android:tag="1"
    />
</LinearLayout>
<LinearLayout android:id="@+id/row2" >
    <SeekBar
        android:id="@+id/seekBar"
        android:tag="2"
    />
</LinearLayout>
<LinearLayout android:id="@+id/row3" >
    <SeekBar
        android:id="@+id/seekBar"
        android:tag="3"
    />
</LinearLayout>

在JavaScript中,我可能会使用类似这样的内容来“自动化”。他们的创作:

for (var i = 0; i < count; i++) {
    child = document.createElement("div");
    child.id = "row" + i;
    parent.appendChild(child);
}

有没有办法自动化&#39;创造这些,这样我就可以拥有一个单一的模型&#39;一,然后迭代几次,&#39;传递&#39;每次的数量?我可以使用基于Java或基于XML的解决方案。

我尝试过使用每个问题,这解决了部分问题,但无法找到一种有效的方式来传递问题。每次都有不同的数字。 (这些数字用于标识来自Java的行中的输入 - 如果有更好的方法来管理它,这也可能有帮助。)

1 个答案:

答案 0 :(得分:1)

您可以在Activity - onCreate中使用Java代码构建Layout

您可以动态修改布局
例如:构建3个搜索栏并按ID删除第一个搜索栏。

public class MainActivity extends AppCompatActivity {

    ArrayList<Integer> seekbarsID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        seekbarsID = new ArrayList<>();

        LinearLayout layout = new LinearLayout(this);

        layout.setOrientation(LinearLayout.VERTICAL);
        layout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));

        for (int i = 1; i < 4; i++) {
            SeekBar seekbar = new SeekBar(this);

            int id;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
               id = View.generateViewId();

            }else{
                id = 99999999+i;

            }
                seekbar.setId(id);
                seekbarsID.add (id);

            seekbar.setTag(i);
            layout.addView(seekbar);



        }


        setContentView(layout);
        layout.removeView(findViewById(seekbarsID.get(0)));

    }
}