2017-06-20 83 views
0

设置连接限制的官方文件说:https://developer.android.com/reference/android/support/constraint/ConstraintSet.html#connect(int,INT,INT,INT,INT)什么是约束保证金的含义设置连接

void connect (int startID, 
       int startSide, 
       int endID, 
       int endSide, 
       int margin) 

保证金以约束(保证金必须是阳性)

为了我的理解,如果我想从左到右连接两个视图,那么这个边距是左边距。

//左边的

constraintset.connect(textView.id,ConstraintSet.LEFT,previousTextViewId,ConstraintSet.RIGHT,10) 

右然后10是左边距。我对吗?我已经实现了这个概念,但没有保证金设置,甚至没有权利或离开。我错过了什么?

+1

查看更新的答案。 – Cheticamp

回答

2

你的理解也是我对事物的理解。这是检查事情如何工作的一种快速方法。

在下面的布局中,textRight的左上角与textLeft的右下角对齐。当MainActivity运行时,textRight应向下移动1,000px,向右移动1,000px。它向下移动了1,000 px,但根本不向右移动。

我相信这是一个突出的问题。请参阅issue report

我不知道解决方法,我很惊讶,这甚至可能是一个错误。如果有人看到错误,我愿意纠正。

two_text_views.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/textLeft" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="8dp" 
     android:text="TextView1" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     android:layout_marginStart="8dp" /> 

    <TextView 
     android:id="@+id/textRight" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView2" 
     android:layout_marginTop="0dp" 
     app:layout_constraintTop_toBottomOf="@+id/textLeft" 
     app:layout_constraintStart_toEndOf="@+id/textLeft" 
     android:layout_marginStart="0dp" /> 
</android.support.constraint.ConstraintLayout> 

**MainActivity.java** 

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ConstraintLayout layout; 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.two_text_views); 

     ConstraintSet constraints = new ConstraintSet(); 
     constraints.clone(layout); 
     constraints.connect(R.id.textRight, ConstraintSet.LEFT, R.id.textLeft, ConstraintSet.RIGHT, 1000); 
     constraints.connect(R.id.textRight, ConstraintSet.TOP, R.id.textLeft, ConstraintSet.BOTTOM, 1000); 
     constraints.applyTo(layout); 
    } 
} 

编辑所以,这里是一个修复。使用ConstraintSet.STARTConstraintSet.END而不是ConstraintSet.LEFTConstraintSet.RIGHT。我只是试了一下,它工作正常。我不能说为什么左右不行。