我有一个按钮和一个文本视图,文本视图有一个可绘制的左侧。单击按钮后,drawable-left 应该被删除,纯文本应该设置为 Text-view,但我不知道如何从代码中删除 drawable-left。
提前致谢。
我有一个按钮和一个文本视图,文本视图有一个可绘制的左侧。单击按钮后,drawable-left 应该被删除,纯文本应该设置为 Text-view,但我不知道如何从代码中删除 drawable-left。
提前致谢。
可以使用以下代码通过代码drawableLeft
修改(或任何类似属性)XML 属性(在您的情况下删除 a ):drawable
yourTextView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
yourTextView.setText("The Text You Need In There");
该方法的构造函数按以下顺序排列:
setCompoundDrawablesWithIntrinsicBounds (int left, int top, int right, int bottom)
我们可以将Drawables(如果有的话)设置为出现在文本的左侧、上方、右侧和下方。
如果您不想要 Drawable,请使用 0 或 null。
textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
Drawables 的边界将设置为它们的内在边界。
调用此方法将覆盖之前使用
{@link #setCompoundDrawablesRelative}
或相关方法设置的所有 Drawable。
如果我们想设置 Drawables,那么我们可以使用:
textView.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley, 0, 0, 0);
可以通过setCompoundDrawablesTextView
方法以编程方式设置a 的可绘制对象。
所以你可以试试这个:
textView.setCompoundDrawables(null, null, null, null);
或者
textView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
如果您要经常这样做,添加扩展会使您的代码更具可读性
fun TextView.clearDrawables() {
this.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0)
}
要使用扩展程序,只需调用
view.clearDrawables()
如何做到这一点并适用于四个drawable中的任何一个DataBinding
@BindingAdapter(value = [
"leftDrawable",
"topDrawable",
"rightDrawable",
"bottomDrawable"], requireAll = false)
fun setCompoundDrawables(textView: TextView,
@DrawableRes left: Int?,
@DrawableRes top: Int?,
@DrawableRes right: Int?,
@DrawableRes bottom: Int?) {
textView.setCompoundDrawablesWithIntrinsicBounds(
left ?: 0,
top ?: 0,
right ?: 0,
bottom ?: 0
)}
将所有位置设置为零 您的可绘制项目已删除
它使用此 setOnFocusChangeListener 方法工作
et_feedback.setCompoundDrawablesWithIntrinsicBounds(0,0, 0, 0);
et_feedback.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
//TODO using this Drawable icon remomve onclick
et_feedback.setCompoundDrawablesWithIntrinsicBounds(0,0, 0, 0);
et_feedback.setTextColor(Color.BLACK);
}
});