Android 在ConstraintLayout中,确定我的视图连接到的视图(例如,通过ConstraintSet.TOP)

Android 在ConstraintLayout中,确定我的视图连接到的视图(例如,通过ConstraintSet.TOP),android,android-constraintlayout,Android,Android Constraintlayout,在ConstraintLayout中,如果我有两个视图的ID,并且我知道我的视图如何连接到另一个视图(例如,ConstraintSet.TOP),如何以编程方式获取连接到视图的视图?我想在布局中交换两个(不一定是连接的!)视图 void swapViews(ConstraintLayout constraintLayout, int view1ID, int view2ID) { ConstraintSet constraintSet = new ConstraintSet();

ConstraintLayout
中,如果我有两个视图的ID,并且我知道我的
视图如何连接到另一个
视图(例如,
ConstraintSet.TOP
),如何以编程方式获取连接到
视图的
视图?我想在布局中交换两个(不一定是连接的!)视图

void swapViews(ConstraintLayout constraintLayout, int view1ID, int view2ID) {
    ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.clone(constraintLayout);

    // How do I get the "anchor" or "connectedView" of a view with a specific constraint?
    // Something like the following:
    // int anchor1 = this.findViewById(view1ID).get...(ConstraintSet.TOP);
    // int anchor2 = this.findViewById(view2ID).get...(ConstraintSet.TOP);

    constraintSet.connect(view2ID, ConstraintSet.TOP, anchor1, ConstraintSet.TOP);
    constraintSet.connect(view1ID, ConstraintSet.TOP, anchor2, ConstraintSet.TOP);
    constraintSet.applyTo(constraintLayout);
}
需要明确的是:这里涉及到四个视图:

  • 我想交换的两个视图。它们可以,但无需以任何方式连接
  • 我的第一个视图所连接的视图;这是我希望第二个视图连接到的视图
  • 以及我的第二个观点所涉及的观点;这是我希望第一个视图连接到的视图

想一想:在棋盘上我想交换两个角。我有他们的ID,我知道他们的每个顶部都连接到其他视图。

如果您知道连接类型,例如
布局\u约束top\u toTopOf
布局\u约束top\u tobottoof
,则可以使用布局参数,如下所示:

View v = findViewById(R.id.viewYouAreInterestedIn);
ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) v.getLayoutParams();
int topConnectionId = lp.topToTop;
有关更多信息,请参阅文档