我在使用矢量绘图时遇到问题,虽然我发现你可以使用
支持矢量app:srcCompat:"@/drawable/your_icon"
这很好用,但我想把图标放在按钮文本的顶部,但我不能在我的按钮上使用drawableTop属性。那么创建自定义属性是否可能?
答案 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"/>