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

在android xml中添加您自己的自定义属性,android,android-vectordrawable,Android,Android Vectordrawable,我在使用vector drawables时遇到了一个问题,尽管我发现您可以使用 app:srcCompat:"@/drawable/your_icon" 这很好,但是我想把图标放在按钮文本的顶部,但是我不能在按钮上使用drawableTop属性。那么,是否可以创建自定义属性?试试这个 public class CustomButtonForDrawableTop extends AppCompatButton{ public CustomButtonForDrawableTop(Context

我在使用vector drawables时遇到了一个问题,尽管我发现您可以使用

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

试试这个

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