Настраиваемая ширина составного вида, не соответствующая родительскому элементу в TableRow - PullRequest
0 голосов
/ 30 июня 2019

Я создал пользовательское представление с именем SectionRowView, которое расширяет ConstraintLayout, которое так просто:

class SectionRowView : ConstraintLayout {
    constructor(context: Context?) : super(context) {
        inflate(context, R.layout.section_row_view, this)
    }
}

SectionRowView надувает свой вид из sectionrowview.xml:

<merge 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:id="@+id/container">


    <View
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:id="@+id/topBorder" app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
            android:background="#979797"/>
    <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="32dp"
            android:id="@+id/checkBox" android:layout_marginTop="15dp"
            app:layout_constraintTop_toBottomOf="@+id/topBorder" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginStart="30dp"
            android:text="test test test test test test"/>
</merge>

Во фрагменте я затем добавляю этот пользовательский вид к TableRow внутри TableLayout:

class CustomizeQuizFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_customize_quiz, container, false)

        val tableView = view.findViewById<TableLayout>(R.id.tableView)
        setupTable(tableView)

        return view
    }

    private fun setupTable(tableView: TableLayout) {

        val layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT)
        val tableRow = TableRow(context)
        tableRow.layoutParams = layoutParams
        val sectionView = SectionRowView(context)
        sectionView.layoutParams = layoutParams
        tableRow.addView(sectionView)
        tableView.addView(tableRow)
    }
}

XML-макет для моего фрагмента выглядит следующим образом:

<androidx.constraintlayout.widget.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:id="@+id/container">

    <TextView
            android:text="Test"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/title" app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="70dp" app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:textSize="32sp" android:gravity="center_horizontal|top" android:layout_marginStart="30dp"
            android:layout_marginEnd="30dp" android:textColor="#3C6FF3"/>
    <TableLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content" android:layout_marginTop="34dp"
            app:layout_constraintTop_toBottomOf="@+id/title" app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent" android:id="@+id/tableView" android:background="#00EC0909"/>
    <Button
            android:text="Start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/startButton"
            app:layout_constraintStart_toStartOf="parent" app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintEnd_toEndOf="parent" android:background="@drawable/customstartbutton"
            android:textColor="#EFFBFD" android:textAllCaps="false" android:textSize="26sp"
            android:layout_marginBottom="30dp" app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Когда я запускаю это, я вижу в инспекторе макета, что ширина SectionRowView не увеличивается до match_parent, как сказано. Это родительский элемент, TableRow имеет полноэкранную ширину, как предполагается:

Layout Inspector Screenshot

Использование SectionRowView внутри LinearLayout прекрасно работает с шириной, распространяющейся на полный экран. Кажется, проблема только в TableRow.

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...