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