android - 动态生成的 LinearLayouts 重叠

标签 android android-layout

我是 Android 开发的新手,而且我还在学习 Java,所以请多多包涵!

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

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

    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);

最佳答案

如果我理解正确,我认为你的问题只是你声明然后更改 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);

}

关于android - 动态生成的 LinearLayouts 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057773/

相关文章:

android - GoogleApiClient 连接失败,状态码为 SIGN_IN_REQUIRED

php - PHP 中的 Android 屏幕截图

android - 聚焦时,如何使 EditText 与键盘一起升高?

android - 使用面部检测 Android 进行面部交换

Android Studio 和 Keytool - Keystore 被篡改,或者密码不正确

java - EditText 无法转换为 CharSequence,EditText 无法转换为 String,找不到符号方法 getEditText()

android - 作为 fragment 子对象的空对象

java - 如何使硬编码(x,y)坐标对于不同屏幕通用?

Android 按钮可绘制色调

android - 如何在 Android 中制作可滚动矩阵?