繁体   English   中英

TypedArray .getColor()始终在自定义视图中返回-1

[英]TypedArray .getColor() always returning -1 in custom view

我创建了一个自定义视图,它将TextViewTextView称为TextViewEx 此视图通过xml为TextView提供的复合Drawables增加了更多的灵活性。 我想要的部分功能是能够对复合drawable进行着色,但无论出于何种原因,返回的颜色始终为-1 这是代码:

attrs.xml:

<resources>
    <declare-styleable name="TextViewEx">
        <attr name="drawableLeftWidth" format="dimension" />
        <attr name="drawableLeftHeight" format="dimension" />
        <attr name="drawableLeftTint" format="color" />

        <attr name="drawableTopWidth" format="dimension" />
        <attr name="drawableTopHeight" format="dimension" />
        <attr name="drawableTopTint" format="color" />

        <attr name="drawableRightWidth" format="dimension" />
        <attr name="drawableRightHeight" format="dimension" />
        <attr name="drawableRightTint" format="color" />

        <attr name="drawableBottomWidth" format="dimension" />
        <attr name="drawableBottomHeight" format="dimension" />
        <attr name="drawableBottomTint" format="color" />
    </declare-styleable>
</resources>

TextViewEx.java:

public class TextViewEx
        extends TextView {

    public TextViewEx(Context context) {
        super(context);
        init(null, 0);
    }

    public TextViewEx(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(attrs, 0);
    }

    public TextViewEx(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(attrs, defStyle);
    }

    private void init(AttributeSet attrs, int defStyle) {

        if (attrs==null) {
            return;
        }

        TypedArray a = getContext().obtainStyledAttributes(
                attrs, R.styleable.TextViewEx, defStyle, 0);

        int lTint = -1, lWidth = -1, lHeight = -1;
        int tTint = -1, tWidth = -1, tHeight = -1;
        int rTint = -1, rWidth = -1, rHeight = -1;
        int bTint = -1, bWidth = -1, bHeight = -1;

        try {
            lTint = a.getColor(R.styleable.TextViewEx_drawableLeftTint, getCurrentTextColor());
            lWidth = a.getDimensionPixelSize(R.styleable.TextViewEx_drawableLeftWidth, 0);
            lHeight = a.getDimensionPixelSize(R.styleable.TextViewEx_drawableLeftHeight, 0);

            tTint = a.getColor(R.styleable.TextViewEx_drawableTopTint, getCurrentTextColor());
            tWidth = a.getDimensionPixelSize(R.styleable.TextViewEx_drawableTopWidth, 0);
            tHeight = a.getDimensionPixelSize(R.styleable.TextViewEx_drawableTopHeight, 0);

            rTint = a.getColor(R.styleable.TextViewEx_drawableRightTint, getCurrentTextColor());
            rWidth = a.getDimensionPixelSize(R.styleable.TextViewEx_drawableRightWidth, 0);
            rHeight = a.getDimensionPixelSize(R.styleable.TextViewEx_drawableRightHeight, 0);

            bTint = a.getColor(R.styleable.TextViewEx_drawableBottomTint, getCurrentTextColor());
            bWidth = a.getDimensionPixelSize(R.styleable.TextViewEx_drawableBottomWidth, 0);
            bHeight = a.getDimensionPixelSize(R.styleable.TextViewEx_drawableBottomHeight, 0);
        } finally {
            a.recycle();
        }

        Drawable[] drawables = getCompoundDrawables();
        if (drawables[0]!=null && lWidth!=0 && lHeight!=0) {
            drawables[0].setBounds(0, 0, lWidth, lHeight);
        }
        if (drawables[1]!=null && tWidth!=0 && tHeight!=0) {
            drawables[1].setBounds(0, 0, tWidth, tHeight);
        }
        if (drawables[2]!=null && rWidth!=0 && rHeight!=0) {
            drawables[2].setBounds(0, 0, rWidth, rHeight);
        }
        if (drawables[3]!=null && bWidth!=0 && bHeight!=0) {
            drawables[3].setBounds(0, 0, bWidth, bHeight);
        }

        if (drawables[0]!=null && lTint!=-1) {
            Graphics.tint(drawables[0], lTint);
        }
        if (drawables[1]!=null && tTint!=-1) {
            Graphics.tint(drawables[1], tTint);
        }
        if (drawables[2]!=null && rTint!=-1) {
            Graphics.tint(drawables[2], rTint);
        }
        if (drawables[3]!=null && bTint!=-1) {
            Graphics.tint(drawables[3], bTint);
        }

        setCompoundDrawables(drawables[0], drawables[1], drawables[2], drawables[3]);

    }
}

并在使用中:

    <com.cheerfulinc.flipagram.view.TextViewEx
        android:id="@+id/likesCount"
        android:gravity="center_vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="30dp"
        android:layout_marginBottom="30dp"
        android:background="@drawable/red_pill_text"
        android:textColor="@android:color/white"
        android:text="22,4456"
        android:drawableRight="@drawable/fg_icon_heart"
        android:drawablePadding="6dp"
        app:drawableRightWidth="12dp"
        app:drawableRightHeight="12dp"
        app:drawableRightTint="#FFFFFFFF" />

我也尝试过: app:drawableRightTint="@android:color/white"但是没有什么,返回的颜色值总是-1

我用白色,白色是-1 :)上面的代码工作得很好。 我为Integer.MAX_VALUE切换了-1 ,一切都很好。

usw getColorStateList而不是getColor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM