Как использовать GuideLine в ConstraintLayout с макетом Kotlin Anko

Вопрос 1:

Хотя я использую guideline в ConstraintLayout, он вообще не работает, приведенный ниже код не может установить orientation (почему такого свойства нет?) guideline, что бесполезно:

constraintLayout {            
    guideline {
         //here, cannot set the orientation of guideline
    }
    //...
}

Несмотря на то, что приведенный ниже код может установить ориентацию направляющей, у него все еще есть та же проблема с макетом (я не знаю, создана ли направляющая или нет):

constraintLayout {            
    constraintSet {
         create(ID_GUIDELINE, VERTICAL_GUIDELINE)
    }
    //...
}

Итак, как правильно использовать GuideLines в макете ConstraintLayout в Anko?

Вопрос 2:

ConstraintLayou в другом ConstraintLayout может иметь неожиданное поведение при использовании Fragment.

Я использую ConstraintLayout(с именем A) в Activity и ConstraintLayout(B) в Fragment, затем добавляю или заменяю B в/с < strong>A, результат показывает, что ширина B всегда неверна.

Однако, если в B есть RecyclerView, и установите layoutParams в B, как показано ниже:

layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)

то работает корректно, без RecyclerView а только другие виджеты, типа buttons/textviews/imageviews, видно что ширина B очень узкая.

Конечно, я могу изменить макет A на FrameLayout, но это не то, что мне нужно, так почему и как это сделать? Спасибо за ответ!

Кроме того, я открыл проблему в библиотеке Anko kotlin здесь: https://github.com/Kotlin/anko/issues/579 и код:

// A in Activity
constraintLayout {
    fitsSystemWindows = true
    id = A
}
supportFragmentManager.beginTransaction().replace(A, fragmentB).commit()
//supportFragmentManager.beginTransaction().add(A, fragmentB).commit()

// B in Fragment
constraintLayout {
    fitsSystemWindows = true
    layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
}

person SpkingR    schedule 04.03.2018    source источник


Ответы (1)


Вопрос 1 попробуйте что-то вроде этого:

    guideline {
      id = ID_GUIDELINE
    }.lparams(0, 0) {
      orientation = ConstraintLayout.LayoutParams.VERTICAL
      guideBegin = dip(80)
    }

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

person eazyE    schedule 13.03.2018
comment
Большое спасибо, я решил эту проблему, просто установил LayoutParams в представлении элемента RecyclerView: - person SpkingR; 18.06.2018