Я пытаюсь создать Activity
с динамическим номером Buttons
, каждый из которых представляет объект Shadow
.
Я не уверен, возможно ли это сделать с XMLфайл, поэтому я решил использовать вместо этого Java-код.
Вся идея отображения всех элементов List
работает - у меня есть кнопка, сгенерированная для каждого Shadow
в списке.
Моя проблема в том, что buttons
все находятся в одном месте, самый большой из них охватывает остальные.Как я могу заставить их отображаться правильно, например, с расстоянием по вертикали 16 dp между ними?
Вот код класса:
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);
});
}
}
}
Поскольку я совершенно новичок в Android, я также был бы признателенлюбая информация о других способах создания динамического контента / небольшой обзор кода, который я написал выше.
ОБНОВЛЕНИЕ: Я немного отредактировал setButtonNames()
, все еще пытаюсь использоватьConstraintLayout
и connect()
, но по какой-то причине он все еще не работает.Я не могу найти, что не так с этим.
savedShadows.forEach(shadow -> {
Button button = new Button(this);
button.setId(View.generateViewId());
button.setText(shadow.getName());
if(shadow == savedShadows.get(0)){
previousButtonId = button.getId();
}else{
constraints.connect(button.getId(), ConstraintSet.TOP, previousButtonId, ConstraintSet.BOTTOM, 16);
previousButtonId = button.getId();
}
constraints.applyTo(layout);
layout.addView(button);
});
}
}