59

我有一个按钮和一个文本视图,文本视图有一个可绘制的左侧。单击按钮后,drawable-left 应该被删除,纯文本应该设置为 Text-view,但我不知道如何从代码中删除 drawable-left。

提前致谢。

4

6 回答 6

109

可以使用以下代码通过代码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)

在此处阅读有关setCompoundDrawablesWithIntrinsicBounds方法的更多信息

于 2013-07-11T11:58:07.103 回答
26

我们可以将Drawables(如果有的话)设置为出现在文本的左侧、上方、右侧和下方。

如果您不想要 Drawable,请使用 0 或 null。

 textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);

Drawables 的边界将设置为它们的内在边界。

调用此方法将覆盖之前使用 {@link #setCompoundDrawablesRelative}或相关方法设置的所有 Drawable。

如果我们想设置 Drawables,那么我们可以使用:

textView.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley, 0, 0, 0);
于 2016-08-04T14:50:41.300 回答
14

可以通过setCompoundDrawablesTextView方法以编程方式设置a 的可绘制对象。

所以你可以试试这个:

textView.setCompoundDrawables(null, null, null, null);

或者

textView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
于 2013-07-11T11:57:59.210 回答
12

添加 Kotlin 扩展

如果您要经常这样做,添加扩展会使您的代码更具可读性

fun TextView.clearDrawables() {
    this.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0)
}

要使用扩展程序,只需调用

view.clearDrawables()
于 2019-12-20T00:24:35.517 回答
1

如何做到这一点并适用于四个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
)}
于 2019-07-08T16:06:53.320 回答
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);

            }
        });
于 2017-11-01T07:31:15.293 回答