我正在尝试创建一个动态数字为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()
答案 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
,它将自动正确添加按钮,而无需使用约束。