简体   繁体   English

相对布局以编程方式将视图添加到其他未正确对齐的视图下方

[英]Relative Layout adding views programmatically one below other not aligning correctly

I am trying to add Text views programmatically to Relative layout parent one below other.我正在尝试以编程方式将文本视图添加到另一个下方的相对布局父级。 However, the first view is not aligning correctly while the rest of the view got aligned correctly.但是,第一个视图未正确对齐,而视图的 rest 已正确对齐。 See attached image.见附图。

在此处输入图像描述

My code:我的代码:

private void setupQuestionChoices(int position) {
    question.setText(questionList.get(position).question());
    choicesTextViewsList.clear();

    for (int i = 0; i < questionList.get(position).choices().size(); i++) {

        TextView textView = new TextView(getActivity());

        textView.setBackgroundResource(R.drawable.qa_button_background);
        textView.setMinWidth(300);
        textView.setGravity(Gravity.CENTER);

        textView.setText(questionList.get(position).choices().get(i));
        textView.setId(i);

        RelativeLayout.LayoutParams layoutParams =
                new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        if (i == 0) {
            layoutParams.addRule(RelativeLayout.BELOW, question.getId());
        } else {
            layoutParams.addRule(RelativeLayout.BELOW, choicesTextViewsList.get(i - 1).getId());
        }
        layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
        layoutParams.setMargins(20, 20, 20, 20);
        relativeLayout.addView(textView, layoutParams);

        choicesTextViewsList.add(textView);

        choicesTextViewsList.get(i).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                answerSelected = true;
            }
        });

    }
}

Relative layout xml where I add my views to:相对布局 xml 我将视图添加到:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <RelativeLayout
        android:id="@+id/relative_parent" //here is where I add views to
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/question"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:layout_marginTop="40dp"
            android:layout_marginEnd="20dp"
            android:layout_marginBottom="10dp"
            android:orientation="horizontal"
            android:textColor="@color/colorPrimary"
            android:textSize="30sp"
            android:textStyle="bold" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_gravity="center"
            android:layout_marginBottom="30dp"
            android:gravity="center">

            <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/button_back"
                style="?android:attr/borderlessButtonStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_marginStart="30dp"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="30dp"
                android:background="@drawable/rectangle_border"
                android:text="Back"
                android:textColor="@android:color/darker_gray" />

            <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/button_next"
                style="?android:attr/borderlessButtonStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignParentEnd="true"
                android:layout_marginStart="30dp"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="30dp"
                android:background="@drawable/rectangle_border"
                android:text="Next"
                android:textColor="@android:color/darker_gray" />
        </RelativeLayout>
    </RelativeLayout>
</ScrollView>

I read some posts related to this issue and followed the guidelines from them but that did not help.我阅读了一些与此问题相关的帖子,并遵循了他们的指导方针,但这并没有帮助。

How to lay out Views in RelativeLayout programmatically? 如何以编程方式在 RelativeLayout 中布局视图?

Create a new TextView programmatically then display it below another TextView 以编程方式创建一个新的 TextView 然后将其显示在另一个 TextView 下方

I was using the index of the for loop as id for the textViews which I changed to make Android generate Id for it as below and it is working fine now as expected.我使用for循环的索引作为 textViews 的 id,我更改为让 Android 为它生成 Id,如下所示,它现在按预期工作正常。

I changed the line我换了行

textView.setId(i)

to

textView.setId(ViewGroup.generateViewId())

Thanks.谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM