在android xml中添加自己的自定义属性

时间:2017-06-07 08:41:58

标签: android android-vectordrawable

我在使用矢量绘图时遇到问题,虽然我发现你可以使用

支持矢量
app:srcCompat:"@/drawable/your_icon"

这很好用,但我想把图标放在按钮文本的顶部,但我不能在我的按钮上使用drawableTop属性。那么创建自定义属性是否可能?

1 个答案:

答案 0 :(得分:3)

试试这个。

public class CustomButtonForDrawableTop extends AppCompatButton{
public CustomButtonForDrawableTop(Context context){
    super(context);
}

public CustomButtonForDrawableTop(Context context, AttributeSet attrs){
    super(context,attrs);
    initAttrs(context,attrs);
}

public CustomButtonForDrawableTop(Context context, AttributeSet attrs, int defStyleAttr){
    super(context,attrs,defStyleAttr);
    initAttrs(context,attrs);
}



void initAttrs(Context context, AttributeSet attrs) {
    if(attrs != null){
        TypedArray attributeArray = context.obtainStyledAttributes(
                attrs,
                R.styleable.CustomButtonForDrawableTop);

        Drawable drawableTop = null;

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            drawableTop = attributeArray.getDrawable(R.styleable.CustomButtonForDrawableTop_drawableTopCompat);
        } else {
            final int drawableTopId =attributeArray.getResourceId(R.styleable.CustomButtonForDrawableTop_drawableTopCompat, -1);

            if(drawableTopId != -1)
                drawableTop = AppCompatResources.getDrawable(context,drawableTopId);
        }
        setCompoundDrawablesWithIntrinsicBounds(null, drawableTop, null, null);
        attributeArray.recycle();
    }
}
}

然后在值

上创建attrs.xml
<resources>
<declare-styleable name="CustomButtonForDrawableTop">
    <attr name="drawableTopCompat" format="reference"/>
</declare-styleable>
</resources>

这就是你怎么称呼它

 <com.example.user.project.CustomButtonForDrawableTop
            app:drawableTopCompat="@drawable/ic_people_black_48px"
            android:layout_margin="5dp"
            android:drawableTint="@color/myColor"
            android:id="@+id/btnStaff"
            android:layout_width="115dp"
            android:layout_height="115dp"
            android:elevation="4dp"
            android:text="Staff"
            android:textAllCaps="false"
            android:textColor="@color/myColorWhite"
            android:shadowColor="@color/myColorActionBar"
            android:background="@drawable/custom_button_rounded8"
            app:layout_flexBasisPercent="@fraction/fraction48percent"/>