我有一个自定义视图,看起来像" fab"使用带有drawable的View和FontIconView(library)绘制我们的海关图标。
CustomView XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.constraint.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/round_icon_button_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<View
android:id="@+id/round_icon_view"
android:layout_width="@dimen/round_button_size"
android:layout_height="@dimen/round_button_size"
android:layout_margin="@dimen/round_button_general_margin"
android:background="@drawable/circle_shape_map_location"
android:elevation="@dimen/location_elevation" />
</FrameLayout>
<FrameLayout
android:id="@+id/round_icon_text_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/round_icon_button_container"
app:layout_constraintEnd_toEndOf="@+id/round_icon_button_container"
app:layout_constraintStart_toStartOf="@+id/round_icon_button_container"
app:layout_constraintTop_toTopOf="@+id/round_icon_button_container">
<com.shamanland.fonticon.FontIconView
android:id="@+id/round_icon_text_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/error_color_red"
android:textSize="@dimen/round_button_text_size" />
</FrameLayout>
</android.support.constraint.ConstraintLayout>
</FrameLayout>
形状XML:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/white_clr" />
<size
android:width="42dp"
android:height="42dp" />
</shape>
在CustomView类中:
public class BSMRoundIconButton extends FrameLayout {
@InjectView(R.id.round_icon_view)
View roundView;
@InjectView(R.id.round_icon_text_icon)
FontIconView fontIconView;
private int mLayoutId;
public BSMRoundIconButton(@NonNull Context context) {
super(context);
init(null);
}
public BSMRoundIconButton(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public BSMRoundIconButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs);
}
protected void init(AttributeSet attrs) {
mLayoutId = R.layout.bsm_round_icon_button_component;
loadView();
}
private void loadView() {
inflate(getContext(), mLayoutId, this);
ButterKnife.inject(this);
}
public void setRoundBackgroundColor(int color) {
Drawable drawableCompat = this.roundView.getBackground();
drawableCompat.setColorFilter(color, PorterDuff.Mode.DST);
this.roundView.setBackground(drawableCompat);
}
public void setRoundSize(int width, int height) {
this.roundView.getLayoutParams().height = height;
this.roundView.getLayoutParams().width = width;
}
public void setIcon(String icon) {
this.fontIconView.setText(icon);
}
public void setIconColor(int color) {
this.fontIconView.setTextColor(color);
invalidate();
}
public void setIconSize(int size) {
this.fontIconView.setTextSize(size);
}
}
问题是我们需要更改背景和图标的颜色。
我们做了几种方法:
public void setRoundBackgroundColor(int color) {
Drawable drawableCompat = getResources().getDrawable(R.drawable.circle_shape_map_location);
drawableCompat.setColorFilter(color, PorterDuff.Mode.DST);
this.roundView.setBackground(drawableCompat);
}
public void setIconColor(int color) {
this.fontIconView.setTextColor(color);
}
但是当这样使用时:
this.roundIconButton.setRoundBackgroundColor(R.color.bright_green);
this.roundIconButton.setIconColor(R.color.bright blue);
背景不会改变颜色,同时图标采用混合颜色(在该示例中,xml设置为红色,蓝色代码)显示为紫色。
我试图使观看无效,但不起作用。
也许我忘记了一些步骤?
答案 0 :(得分:0)
调用// input attributes...
document.getElementsByName('ptitle')[0].placeholder = 'Your Title Here...';
document.getElementsByName('ptitle')[0].maxLength = '28';
后,您需要调用invalidate roundIconButton.invalidate()
方法。这会导致视图重绘,因此您的颜色会更新。
同样在您的自定义视图中,在roundIconButton.setIconColor(R.color.bright blue);
方法中作为最后一行,您可以添加setIconColor
并执行相同的操作..只需更好的代码格式化。
如果这样可以解决您的问题,请告诉我