在 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"/>
我在使用矢量可绘制对象时遇到问题,尽管我发现您可以通过使用
来支持矢量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"/>