动态元素数量布局问题

时间:2018-09-13 14:53:21

标签: java android user-interface dynamic

我正在尝试创建一个动态数字为Activity的{​​{1}},每个数字代表一个Buttons对象。

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

显示所有Shadow元素的整个想法正在起作用-我为列表中的每个List生成了一个按钮。

我的问题是Shadow都在同一个地方,最大的一个覆盖了其他地方。如何使它们正确显示,例如它们之间有16dp的垂直空间?

这是课程代码:

buttons

由于我是Android的新手,所以我也非常感谢有关创建动态内容的其他方式的任何信息/对我上面编写的代码进行了小幅回顾。

更新: 我已经对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); }); } } } 进行了一些编辑,仍然尝试使用setButtonNames()ConstraintLayout方法,但是由于某些原因,它仍然不起作用。我找不到这是怎么回事。

connect()

1 个答案:

答案 0 :(得分:1)

您的问题是您没有为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,它将自动正确添加按钮,而无需使用约束。