我是Android开发的新手,我还在学习Java,所以要温柔!
我正在创建一个可以获取任务信息的应用程序(我将其基于一种家庭作业计划程序),存储该信息,然后将其显示在列表中。该程序必须能够从后台文件动态生成列表。到目前为止,我已经管理了所有这些,但是当我为每个任务创建一个基本输出时,使用LinearLayout包含“subject”和“details”变量,它们出现在屏幕重叠上。他们似乎都在正确创造,但他们都被放在同一个地方。是否有我可以设置的属性使它们显示在垂直列表中???
这是我生成视图组并显示它们的代码段。这是从程序另一部分的循环中调用的,该循环查找内部存储中的文件数。
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);
答案 0 :(得分: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);
}
答案 1 :(得分:0)
您的displayLayout是一个relativeLayout ..顾名思义,相对布局将元素相对于彼此放置。通常你会说“元素A应该低于元素B”等等。因为你没有为你正在创建的项目提供任何这些规则,所以它们都会以相对布局(这是相同的布局)进入默认位置屏幕的顶部..因此重叠)
如果您不想处理更改代码的麻烦,只需将您的displayLayout切换为xml和代码中的LinearLayout,并将其方向设置为垂直。如果它在屏幕上运行,您可能希望将其包装在滚动视图中
然而,听起来你真正想要的是ListView ......