如何在ConstraintLayout中使用GuideLine和Kotlin Anko布局

时间:2018-03-04 03:26:41

标签: android kotlin android-constraintlayout anko

问题1:

虽然我在ConstraintLayout中使用guideline,但它根本不起作用,下面的代码无法设置orientation guideline(为什么没有这样的属性?) ,这是无用的:

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

即使下面的代码可以设置指南方向,但它仍然存在与布局相同的问题(我不知道指南是否已创建):

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

那么,在Anko的ConstraintLayout布局中使用GuideLines的正确方法是什么?

问题2:

使用Fragment时,另一个ConstraintLayout中的ConstraintLayou可能会出现意外行为。

我在Activity中使用ConstraintLayout(以 A 命名),在Fragment中使用ConstraintLayout( B ),然后添加或替换 B 进入 A ,结果显示 B 的宽度始终不正确。

但是,如果 B 中有RecyclerView,并将 B layoutParams设置如下:

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)
}

1 个答案:

答案 0 :(得分:0)

问题1尝试这样的事情:

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

问题2应该在一个标题很好的单独帖子中,以便更有可能得到回答,并且更容易被其他人搜索。