본문 바로가기

프로그래밍/Android

[Android] ConstraintSet

ConstraintSet 은 ConstraintLayout 의 각 뷰들에 대한 Constraint 정보를 담고있는 배열

레이아웃 구성시 각 뷰에 constraint 를 기술하지만 실제 데이터는 부모 ConstraintLayout 의 ConstraintSet 에 저장된다.
동적으로 코드에서 구성시 ConstraintSet 를 생성해 기존 데이터를 clone 하거나 새로 값을 입력 후 ConstraintLayout 에 적용 시켜주면 된다.

 

https://developer.android.com/reference/android/support/constraint/ConstraintSet

 

ConstraintSet  |  Android Developers

ConstraintSet public class ConstraintSet extends Object java.lang.Object    ↳ android.support.constraint.ConstraintSet This class allows you to define programmatically a set of constraints to be used with ConstraintLayout. For details about Constraint beha

developer.android.com

 

직접 설정하기

ConstraintSet mConstraintSet = new ConstraintSet();

// 두 뷰간에 constraint 생성
mConstraintSet.connect( R.id.view1, ConstraintSet.RIGHT, R.id.view2, ConstraintSet.LEFT );

// 뷰의 layoutparam을 constraintset 을 이용해 변경
ConstraintLayout.LayoutParams;
	// = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams source);
	// = new ConstraintLayout.LayoutParams( Context c, AttributeSet attr );
    // = new ConstraintLayout.LayoutParams( ViewGroup.LayoutParams source );
mConstraintSet.applyToLayoutParams( R.id.view, ConstraintLayout.LayoutParams params );

// 특정 뷰에 constrint 적용
mConstraintSet.constraintWidth( R.id.view, ConstraintSet.MATCH_CONSTRAINT )
mConstraintSet.setDimensionRatio( R.id.view, "H,1:2" )
mConstraintSet.constraintPercentWidth( int viewID, float percent );

// 기존 constraint 제거
mConstraintSet.clear( R.id.view, ConstraintSet.END )

// constraint layout 에 constraitset 반영
mConstraintSet.applyTo( binding.constraintLayout )

 

 

기존 레이아웃의 constraintset  얻기

ConstraintSet mConstraintSet = new ConstraintSet();
mConstraintSet.clone( context, R.layout.constraintLayout );

 

바인딩된 레이아웃 객체에서  constraintset 얻기

MyActivityBinding binding = DataBindingUtil.setContentView( context, R.layout.activity );
ConstraintLayout mLayout = binding.constraintLayout;
ConstraintSet mConstraintSet = new ConstraintSet();
mConstraintSet.clone( mLayout ); 

 

ConstraintSet 적용시 transition 효과 사용

MyActivityBinding binding = DataBindingUtil.setContentView( context, R.layout.activity );
ConstraintLayout mLayout = binding.constraintLayout;

val transition = ChangeBounds()
transition.duration = 200L
TransitionManager.beginDelayedTransition( mLayout, transition );
mConstraintSet.applyTo( mLayout );