1

我是 Android 开发的新手,我还在学习 Java,所以要温柔!

我正在创建一个应用程序,它可以获取有关任务的信息(我基于一种家庭作业计划器),存储该信息,然后将其显示在列表中。程序必须能够从后台文件动态生成列表。到目前为止,我已经管理了所有这些,但是当我为每个任务创建一个基本输出时,使用 LinearLayout 包含“主题”和“详细信息”变量,它们出现在屏幕上重叠。他们似乎都在正确地创建,但他们都被放在同一个地方。是否可以设置属性以使它们显示在垂直列表中???

这是我生成视图组并显示它们的代码。这是从程序另一部分的循环中调用的,该部分查找内部存储中的文件数。

    TextView subjView;
    TextView detailView;
    RelativeLayout displayLayout;

    LinearLayout taskDisplay = new LinearLayout(this);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);


    subjView = new TextView(this);      
    detailView = new TextView(this);
    displayLayout = (RelativeLayout) findViewById(R.id.relative_display_layout);

    subjView.setText(subject);
    detailView.setText(details);

    layoutParams.setMargins(0, 0, 0, 0);
    taskDisplay.addView(subjView, layoutParams);

    layoutParams.setMargins(10, 0, 0, 0);
    taskDisplay.addView(detailView, layoutParams);

    displayLayout.addView(taskDisplay);
4

2 回答 2

1

如果我理解正确,我认为您的问题只是您要声明然后更改将layoutParams它们设置为相同的边距,这与您的TextViews.


编辑

好的,我仍然不是 100% 确定你是如何做这一切的,所以我的例子可能需要调整。我试图快速把它放在一起,所以请原谅我的任何小错误。

动态布局的新模型:

TextView subjView, detailView;
RelativeLayout displayLayout, rl;

// I am assuming this is your main layout
displayLayout = (RelativeLayout) findViewById(R.id.relative_display_layout);

// Just using a for loop as an example of a loop event, not sure how you are accomplishing this
for(int i = 0; i < data.length(); i++) {

    RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 100);

    if (i > 0) {
        int rePositionRule = i;
        rllp.addRule(RelativeLayout.BELOW, rePositionRule);
    }

    RelativeLayout taskDisplay = new RelativeLayout(this);

    taskDisplay.setLayoutParams(rllp);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.setMargins(0, 0, 0, 0);

    LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    layoutParams2.setMargins(10, 0, 0, 0);

    subjView = new TextView(this);      
    detailView = new TextView(this);


    subjView.setText(subject);
    subjView.setLayoutParams(layoutParams);
    detailView.setText(details);
    detailView.setLayoutParams(layoutParams2);


    taskDisplay.addView(subjView);
    taskDisplay.addView(detailView);

    displayLayout.addView(taskDisplay);

}
于 2012-10-24T21:46:51.640 回答
0

您的 displayLayout 是一个 relativeLayout.. 一个相对布局,顾名思义,将元素彼此相对放置。通常你会说“元素 A 应该低于元素 B”等等。由于你没有为你正在创建的项目提供任何这些规则,它们只是将全部转到相对布局中的默认位置(即屏幕顶部..因此重叠)

如果您不想处理更改代码以相对放置事物的麻烦,只需在 xml 和代码中将 displayLayout 切换为 LinearLayout 并将其方向设置为垂直。如果它跑出屏幕,您可能希望将其包装在滚动视图中

但是,听起来您真正想要的是 ListView ......

于 2012-10-24T21:30:12.287 回答