Open1

Android

codeanalyzecodeanalyze

ConstraintLayoutを動的に変更する

  • 動的にレイアウトを動かしたいときがある。そんな時にConstraintSetを使用する。
  • ガイドラインを動的に割合を変更し、ガイドラインを参照しているViewの大きさを取得する例。
  • ConstraintSetを適用しすぐに幅を取得しても以前のものが返ってくるのでViewTreeObserver.OnPreDrawListenerを使って変更後のタイミングで取得する。
  • ViewTreeObserver.OnPreDrawListener 使用時にはremoveOnPreDrawListenerも忘れずに
final ConstraintLayout constraintLayout = findViewById(R.id.constraint);
final ConstraintSet set = new ConstraintSet();
set.clone(constraintLayout);
set.setGuidelinePercent(R.id.guideline, 50);
set.applyTo(constraintLayout);
constraintLayout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
        constraintLayout.getViewTreeObserver().removeOnPreDrawListener(this);
        final int width = childView.getWidth();
        return false;
    }
});