установить высоту просмотра как matchparent программно в kotlin - PullRequest
0 голосов
/ 16 февраля 2020

Мне нужно программно установить высоту кнопки как matchparent в моем классе constraintLayout.

open class Myword @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null
     ) : ConstraintLayout(context,attrs) {

    var set = ConstraintSet()
    val tastoetim= Button(this.context)
    init{
        this.addView(tastoetim)
        tastoetim.requestLayout()


        set.connect(tastoetim.id, ConstraintSet.LEFT,this.id, ConstraintSet.LEFT, 10)
        set.connect(tastoetim.id, ConstraintSet.BOTTOM,this.id, ConstraintSet.BOTTOM, 0)

        tastoetim.minHeight = 0
        tastoetim.getLayoutParams().height= ViewGroup.LayoutParams.MATCH_PARENT

    } }

это не работает.

Как уже указывал автор этого поста ( программно установить высоту просмотра изображения как matchparent ), ни один из этих ответов не работает.

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Из документации для ConstraintLayout :

Важно: MATCH_PARENT не рекомендуется для виджетов, содержащихся в ConstraintLayout. Подобное поведение может быть определено с помощью MATCH_CONSTRAINT с соответствующими левыми / правыми или верхними / нижними ограничениями, установленными на «родительский».

По моему опыту, использование MATCH_PARENT может привести к некоторым странным результатам.

В вашем случае вы захотите сделать что-то вроде следующего:

open class Myword @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null
) : ConstraintLayout(context, attrs) {


    init {
        val tastoetim = Button(this.context)
        // The new Button needs an id, otherwise, it is "NO_ID" (-1)
        tastoetim.id = View.generateViewId()
        val lp = ConstraintLayout.LayoutParams(
            ConstraintLayout.LayoutParams.WRAP_CONTENT,
            ConstraintLayout.LayoutParams.MATCH_CONSTRAINT
        )
        this.addView(tastoetim, lp)

        // Get the ConstraintSet only after the view is added.
        val set = ConstraintSet()
        set.clone(this)

        set.connect(
            tastoetim.id,
            ConstraintSet.LEFT,
            ConstraintSet.PARENT_ID,
            ConstraintSet.LEFT,
            10
        )

        // For match constraints, we need a top and a bottom view to connect to. Here the
        // parent top is assumed, but it could be another view.
        set.connect(
            tastoetim.id,
            ConstraintSet.TOP,
            ConstraintSet.PARENT_ID,
            ConstraintSet.TOP,
            0
        )
        set.connect(
            tastoetim.id,
            ConstraintSet.BOTTOM,
            ConstraintSet.PARENT_ID,
            ConstraintSet.BOTTOM,
            0
        )

        // Apply the updated ConstraintSet back to the ConstraintLayout.
        set.applyTo(this)
    }
}
0 голосов
/ 16 февраля 2020

Разрешается сначала установкой:

tastoetim.setMinHeight(0);
tastoetim.setMinimumHeight(0);

А затем:

tastoetim.getLayoutParams().height= ViewGroup.LayoutParams.MATCH_PARENT;

setMinHeight определяется ButtonView, а setMinimumHeight определяется View. Согласно документам, используется большее из двух значений, поэтому оба должны быть установлены.

...