프로그래밍/Android
[Android] ConstraintSet
chance
2019. 8. 22. 12:42
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 );