Установить кнопку и TextView вес программно - PullRequest
0 голосов
/ 26 апреля 2020

Я создаю базовое приложение для задач c, когда вызывается событие addRow, я хочу программно добавить макет XML ниже (новая строка, содержащая текст и кнопку) Как я могу создать следующий макет программно?

    <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/main_table"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintHorizontal_bias="0.466"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@+id/ll_component_container">

        <TableRow
                android:layout_width="match_parent"
                android:layout_marginTop="30dp"
                android:id="@+id/tab1"
                android:weightSum="5"
                android:layout_height="84dp">
            <TextView
                    android:id="@+id/textView1"
                    android:layout_width="fill_parent"
                    android:layout_weight="4"
                    android:paddingLeft="20dp"
                    android:textColor="#FFFFFF"
                    android:layout_height="wrap_content"
                    android:text="Value1"
                    android:textAppearance="?android:attr/textAppearanceSmall"/>
            <Button
                    android:text="Remove"
                    android:background="#fc032c"
                    android:layout_marginRight="20dp"
                    android:layout_weight="1"
                    android:layout_height="40dp" android:id="@+id/button1"/>
        </TableRow>
    </TableLayout>

Я пробовал это, но не могу найти, как изменить ни вес, ни кнопку marginRight.

   private fun addRow(content: Editable) {
        val tl = findViewById<TableLayout>(R.id.main_table)
        val _id = View.generateViewId()
        val tr_head = TableRow(this)
        tr_head.id = _id
        tr_head.layoutParams = TableRow.LayoutParams(
            TableRow.LayoutParams.MATCH_PARENT,
            84,
            5f
        )

        val label = TextView(this)
        label.id = View.generateViewId()
        label.text = content
        label.setTextColor(Color.WHITE)
        label.setPadding(20, 0,0,0)
        tr_head.addView(label)

        val btn = Button(this)
        btn.id = _id + 1
        btn.setBackgroundColor(Color.RED)
        btn.setText("Remove")

        tr_head.addView(label)
        tr_head.addView(btn)

        tl.addView(
            tr_head, TableLayout.LayoutParams(
                TableRow.LayoutParams.MATCH_PARENT,
                TableRow.LayoutParams.WRAP_CONTENT
            )
        )
    }

1 Ответ

0 голосов
/ 26 апреля 2020

Я нашел другой способ достичь sh того, что хотел, поэтому вместо использования веса я использовал ширину экрана, чтобы получить относительную ширину. и чтобы добавить поле, я просто добавил пустую строку перед строкой, которая содержит кнопку и текст. Вот полный код для заинтересованных.

private fun addRow(content: Editable) {
    val tl = findViewById<TableLayout>(R.id.main_table)
    val margin = TableRow(this)
    val tr_head = TableRow(this)
    margin.id = View.generateViewId()

    tr_head.id = View.generateViewId()
    val tabParams = TableRow.LayoutParams(
        TableRow.LayoutParams.MATCH_PARENT,
        84
    )
    tr_head.setLayoutParams(tabParams)

    val label = TextView(this)
    label.id = View.generateViewId()
    label.text = content
    label.setTextColor(Color.WHITE)
    val displayMetrics = DisplayMetrics()
    windowManager.defaultDisplay.getMetrics(displayMetrics)
    label.width = (displayMetrics.widthPixels / 3)*2
    label.setPadding(50, 0,0,0)
    tr_head.addView(label)

    val btn = Button(this)
    btn.id = View.generateViewId()
    btn.width = (displayMetrics.widthPixels / 3) - 50

    btn.setBackgroundColor(Color.RED)
    btn.setText("Remove")
    btn.setOnClickListener {
        tl.removeView(tr_head)
        tl.removeView(margin)
    }
    label.id = View.generateViewId()


    val filler = TextView(this)
    filler.id = View.generateViewId()

    margin.addView(filler)
    tr_head.addView(btn)
    tl.addView(
        margin,  TableLayout.LayoutParams(
            TableRow.LayoutParams.MATCH_PARENT,
            20
        )
    )
    tl.addView(
        tr_head, tabParams
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...