Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态单元数布局问题_Java_Android_User Interface_Dynamic - Fatal编程技术网

Java 动态单元数布局问题

Java 动态单元数布局问题,java,android,user-interface,dynamic,Java,Android,User Interface,Dynamic,我正在尝试创建一个具有动态数量的按钮的活动,每个按钮代表一个阴影对象 我不确定是否可以使用XML文件,所以我决定改用Java代码 显示所有列表元素的整个想法正在发挥作用-我为列表中的每个阴影生成了一个按钮 我的问题是按钮都在同一个位置,最大的一个覆盖了其他按钮。如何使它们正确显示,例如,它们之间的垂直间距为16dp 以下是课程代码: package com.jackw.nfshadow; import android.os.Bundle; import android.support.cons

我正在尝试创建一个具有动态数量的
按钮的
活动
,每个按钮代表一个
阴影
对象

我不确定是否可以使用XML文件,所以我决定改用Java代码

显示所有
列表
元素的整个想法正在发挥作用-我为列表中的每个
阴影
生成了一个按钮

我的问题是
按钮
都在同一个位置,最大的一个覆盖了其他按钮。如何使它们正确显示,例如,它们之间的垂直间距为16dp

以下是课程代码:

package com.jackw.nfshadow;

import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

import com.biernacki.nfshadow.tagdiscoveredactivities.Shadow;

import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class ShadowLibrary extends AppCompatActivity {

    private List<Shadow> savedShadows;
    private ConstraintLayout layout;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if(savedInstanceState != null) {
            super.onCreate(savedInstanceState);
        }else{
            super.onCreate(new Bundle());
        }
        setContentView(R.layout.activity_shadow_library);
        layout  = findViewById(R.id.shadow_library);
        setButtonNames();
    }

    private void setButtonNames() {
        if(Main.savedShadows != null && Main.savedShadows.size() > 0){
            savedShadows = Main.savedShadows.stream()
                    .sorted(Comparator.comparing(Shadow::getName))
                    .collect(Collectors.toList());

            savedShadows.forEach(shadow -> {
                Button button = new Button(this);
                button.setId(View.generateViewId());
                button.setText(shadow.getName());
                layout.addView(button);
            });

        }
    }
}

您的问题是没有为
按钮添加约束。您可以像在本例中一样执行此操作,其中
layout
是您的
ConstraintLayout

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(layout);
constraintSet.connect(someButton.getId(), ConstraintSet.TOP, 
                       anotherButton.getId(), ConstraintSet.BOTTOM);
constraintSet.applyTo(constraintLayout);

您需要根据需要添加约束。或者将您的
ConstraintLayout
替换为
LinearLayout
,它将自动正确添加按钮,而无需使用约束。

请尝试一个简单的
LinearLayout
解决方案,而不是需要附加约束信息的
ConstraintLayout
。我正在尝试使用约束布局和约束,但仍然有问题。当我设法解决这个问题时,我会更新帖子
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(layout);
constraintSet.connect(someButton.getId(), ConstraintSet.TOP, 
                       anotherButton.getId(), ConstraintSet.BOTTOM);
constraintSet.applyTo(constraintLayout);