Android LinearLayout 每行一个元素



我想以编程方式对齐LinearLayout中每行一个CheckBox元素。我正在 LinearLayout 对象中动态添加 CheckBox 元素。

我尝试使用setLines(1)setWidth(400)设置复选框。

public class QuizQuestionActivity extends AppCompatActivity {
    TextView questionText;
    LinearLayout answerLinearLayout;
    ArrayList<CheckBox> answers;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_quiz_question);
        setTitleQuestion("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pellentesque pulvinar rutrum.");
        answerLinearLayout = (LinearLayout) findViewById(R.id.answerLinearLayout);
        displayAnswers();
    }
    private void setTitleQuestion(String titleQuestion) {
        setContentView(R.layout.activity_quiz_question);
        questionText = (TextView) findViewById(R.id.titleQuestionText);
        questionText.setText(titleQuestion);
    }
    private void displayAnswers() {
        createAnswers();
        for (CheckBox answer: answers) {
            answerLinearLayout.addView(answer);
        }
    }
    private void createAnswers() {
        answers = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            String content = "Réponse : "+i;
            CheckBox checkbox = createAnswer(content);
            System.out.println(checkbox);
            answers.add(checkbox);
        }
    }
    private CheckBox createAnswer(String text) {
        CheckBox answer = new CheckBox(this);
        answer.setLines(1);
        answer.setWidth(400);
        answer.setText(text);
        answer.setClickable(true);
        return answer;
    }
    private String getQuizQuestionId() {
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            return extras.getString(MainActivity.INTENT_QUIZ_QUESTION_ID);
        }
        return null;
    }
}


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.alexbdev.quizzy.QuizQuestionActivity">

    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="368dp"
        android:layout_height="80dp"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <TextView
            android:id="@+id/titleQuestionText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="none"
            android:gravity="left"
            android:textStyle="normal" />
    </ScrollView>
    <LinearLayout
        android:id="@+id/answerLinearLayout"
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:orientation="horizontal"
        app:layout_constraintTop_toBottomOf="@+id/scrollView2"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"></LinearLayout>
</android.support.constraint.ConstraintLayout>

编辑:

好的,我想我需要LinearLayout.LayoutParams作为第二个参数传递给函数 addView,我已经尝试了以下代码,但只显示第一个元素。

private void displayAnswers() {
    createAnswers();
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
    );
    for (CheckBox answer: answers) {
        answerLinearLayout.addView(answer, params);
    }
}

请注意,您的方向是:

android:orientation="horizontal"

如果您希望它是每行的,它应该是:

android:orientation="vertical"

相关内容

最新更新