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

Adding your own custom attribute in android xml

我在使用矢量可绘制对象时遇到问题,尽管我发现您可以通过使用

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

这工作正常,但我想将图标放在按钮文本的顶部,但我不能在我的按钮上使用 drawableTop 属性。那么可以创建自定义属性吗?

试试这个。

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"/>