Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to use anvil with ConstraintLayout? #116

Open
amoikevin opened this issue Jun 13, 2017 · 2 comments
Open

How to use anvil with ConstraintLayout? #116

amoikevin opened this issue Jun 13, 2017 · 2 comments

Comments

@amoikevin
Copy link

amoikevin commented Jun 13, 2017

I wrote a helper class:

package trikita.anvil.constraint;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.constraint.ConstraintLayout;
import android.support.constraint.ConstraintSet;
import android.support.constraint.Guideline;
import android.view.View;

import com.android.Action;
import com.android.widget.ConstraintLayoutUtils;

import trikita.anvil.Anvil;
import trikita.anvil.Anvil.AttributeSetter;
import trikita.anvil.Anvil.Renderable;
import trikita.anvil.BaseDSL.ViewClassResult;

import static trikita.anvil.BaseDSL.attr;
import static trikita.anvil.BaseDSL.v;

/**
 * Created by JKL on 2017/3/24.
 */
public final class ConstraintDSL implements AttributeSetter {

    static {
        Anvil.registerAttributeSetter(new ConstraintDSL());
    }

    public static Void constraintBaselineToBaseline(final int value) {
        return attr("constraintBaselineToBaseline", value);
    }

    public static Void constraintBottomToBottom(final int value) {
        return attr("constraintBottomToBottom", value);
    }

    public static Void constraintBottomToTop(final int value) {
        return attr("constraintBottomToTop", value);
    }

    public static Void constraintDimensionRatio(final String value) {
        return attr("constraintDimensionRatio", value);
    }

    public static Void constraintEditorAbsoluteX(final int value) {
        return attr("constraintEditorAbsoluteX", value);
    }

    public static Void constraintEditorAbsoluteY(final int value) {
        return attr("constraintEditorAbsoluteY", value);
    }

    public static Void constraintEndToEnd(final int value) {
        return attr("constraintEndToEnd", value);
    }

    public static Void constraintEndToStart(final int value) {
        return attr("constraintEndToStart", value);
    }

    public static Void constraintGoneBottomMargin(final int value) {
        return attr("constraintGoneBottomMargin", value);
    }

    public static Void constraintGoneEndMargin(final int value) {
        return attr("constraintGoneEndMargin", value);
    }

    public static Void constraintGoneLeftMargin(final int value) {
        return attr("constraintGoneLeftMargin", value);
    }

    public static Void constraintGoneRightMargin(final int value) {
        return attr("constraintGoneRightMargin", value);
    }

    public static Void constraintGoneStartMargin(final int value) {
        return attr("constraintGoneStartMargin", value);
    }

    public static Void constraintGoneTopMargin(final int value) {
        return attr("constraintGoneTopMargin", value);
    }

    public static Void constraintGuideBegin(final int value) {
        return attr("constraintGuideBegin", value);
    }

    public static Void constraintGuideEnd(final int value) {
        return attr("constraintGuideEnd", value);
    }

    public static Void constraintGuidePercent(final float value) {
        return attr("constraintGuidePercent", value);
    }

    public static Void constraintHorizontalBias(final float bias) {
        return attr("constraintVerticalBias", bias);
    }

    public static Void constraintHorizontalChainStyle(final int style) {
        return attr("constraintHorizontalChainStyle", style);
    }

    public static Void constraintHorizontalWeight(final float weight) {
        return attr("constraintHorizontalWeight", weight);
    }

    public static ViewClassResult constraintLayout() {
        return v(ConstraintLayout.class);
    }

    public static Void constraintLayout(@NonNull final Renderable render) {
        return v(ConstraintLayout.class, render);
    }

    public static Void constraintLeftToLeft(final int value) {
        return attr("constraintLeftToLeft", value);
    }

    public static Void constraintLeftToRight(final int value) {
        return attr("constraintLeftToRight", value);
    }

    public static Void constraintMatchConstraintDefaultHeight(final int value) {
        return attr("constraintMatchConstraintDefaultHeight", value);
    }

    public static Void constraintMatchConstraintDefaultWidth(final int value) {
        return attr("constraintMatchConstraintDefaultWidth", value);
    }

    public static Void constraintMatchConstraintMaxHeight(final int value) {
        return attr("constraintMatchConstraintMaxHeight", value);
    }

    public static Void constraintMatchConstraintMaxWidth(final int value) {
        return attr("constraintMatchConstraintMaxWidth", value);
    }

    public static Void constraintMatchConstraintMinHeight(final int value) {
        return attr("constraintMatchConstraintMinHeight", value);
    }

    public static Void constraintMatchConstraintMinWidth(final int value) {
        return attr("constraintMatchConstraintMinWidth", value);
    }

    public static Void constraintOrientation(final int value) {
        return attr("constraintOrientation", value);
    }

    public static Void constraintRightToLeft(final int value) {
        return attr("constraintRightToLeft", value);
    }

    public static Void constraintRightToRight(final int value) {
        return attr("constraintRightToRight", value);
    }

    public static Void constraintStartToEnd(final int value) {
        return attr("constraintStartToEnd", value);
    }

    public static Void constraintStartToStart(final int value) {
        return attr("constraintStartToStart", value);
    }

    public static Void constraintTopToBottom(final int value) {
        return attr("constraintTopToBottom", value);
    }

    public static Void constraintTopToTop(final int value) {
        return attr("constraintTopToTop", value);
    }

    public static Void constraintVerticalBias(final float bias) {
        return attr("constraintVerticalBias", bias);
    }

    public static Void constraintVerticalChainStyle(final int style) {
        return attr("constraintVerticalChainStyle", style);
    }

    public static Void constraintVerticalWeight(final float weight) {
        return attr("constraintVerticalWeight", weight);
    }

    public static ViewClassResult guideline() {
        return v(Guideline.class);
    }

    public static Void guideline(@NonNull final Renderable render) {
        return v(Guideline.class, render);
    }

    public static void apply(@NonNull final Action<ConstraintSet> applyer) {
        final ConstraintLayout parent = Anvil.currentView();
        if (parent == null) return;
        ConstraintLayoutUtils.apply(parent, applyer);
    }

    @Override
    public boolean set(@NonNull View v, @NonNull String name, @Nullable Object value, @Nullable Object prevValue) {
        switch (name) {
            case "constraintHorizontalWeight":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Float) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.horizontalWeight = (float) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintVerticalWeight":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Float) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.verticalWeight = (float) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintHorizontalBias":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Float) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.horizontalBias = (float) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintVerticalBias":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Float) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.verticalBias = (float) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintHorizontalChainStyle":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.horizontalChainStyle = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintVerticalChainStyle":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.verticalChainStyle = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGuideBegin":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Float) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.guideBegin = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGuideEnd":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Float) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.guideEnd = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGuidePercent":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Float) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.guidePercent = (float) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintLeftToLeft":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.leftToLeft = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintLeftToRight":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.leftToRight = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintRightToLeft":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.rightToLeft = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintRightToRight":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.rightToRight = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintTopToTop":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.topToTop = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintTopToBottom":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.topToBottom = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintBottomToTop":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.bottomToTop = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintBottomToBottom":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.bottomToBottom = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintBaselineToBaseline":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.baselineToBaseline = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintStartToEnd":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.startToEnd = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintStartToStart":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.startToStart = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintEndToStart":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.endToStart = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintEndToEnd":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.endToEnd = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGoneLeftMargin":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.goneLeftMargin = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGoneTopMargin":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.goneTopMargin = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGoneRightMargin":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.goneRightMargin = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGoneBottomMargin":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.goneBottomMargin = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGoneStartMargin":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.goneStartMargin = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintGoneEndMargin":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.goneEndMargin = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintDimensionRatio":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof String) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.dimensionRatio = (String) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintMatchConstraintDefaultWidth":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.matchConstraintDefaultWidth = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintMatchConstraintDefaultHeight":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.matchConstraintDefaultHeight = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintMatchConstraintMinWidth":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.matchConstraintMinWidth = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintMatchConstraintMaxWidth":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.matchConstraintMaxWidth = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintMatchConstraintMinHeight":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.matchConstraintMinHeight = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintMatchConstraintMaxHeight":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.matchConstraintMaxHeight = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintEditorAbsoluteX":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.editorAbsoluteX = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintEditorAbsoluteY":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.editorAbsoluteY = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
            case "constraintOrientation":
                if (v.getLayoutParams() instanceof ConstraintLayout.LayoutParams && value != null && value instanceof Integer) {
                    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) v.getLayoutParams();
                    params.orientation = (int) value;
                    v.setLayoutParams(params);
                    return true;
                }
                break;
        }
        return false;
    }
}

But it did not work
Any idea?

@pardom
Copy link

pardom commented Apr 16, 2018

Is this project still active? I, too, would like to use Anvil with ConstraintLayout and the latest versions of other support libraries.

@sgrekov
Copy link
Collaborator

sgrekov commented Sep 13, 2019

Experimental DSL support for CL is done in #132

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants