setCompoundDrawables EditText Text Overlapping

时间:2014-01-30 07:06:15

标签: android android-edittext drawable

我正在使用DrawableEditText开头使用setCompoundDrawables作为文字,但结果不正确。我需要的是我的文字在Drawable打字后开始,而不是我得到这个

enter image description here

我有一个EditText在像这样定义的布局中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/control"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingLeft="4dp" >

    <EditText
        android:id="@+id/field"
        style="@style/TextField"
        android:inputType="number" />

</LinearLayout>

我必须在Drawable的开头添加一段文字EditText。因此,我使用此Drawable

将文本转换为class
public class TextDrawable extends Drawable {

    private final String text;
    private final Paint paint;

    public TextDrawable(String text) {
        this.text = text;
        this.paint = new Paint();
        paint.setColor(Color.parseColor("#009999"));
        paint.setTextSize(30);
        paint.setAntiAlias(true);
        paint.setTextAlign(Paint.Align.LEFT);
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawText(text, 0, 6, paint);
    }

    @Override
    public void setAlpha(int alpha) {
        paint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
        paint.setColorFilter(cf);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }
}

我在这里实施

final   EditText field   = (EditText) widget.findViewById(R.id.field);

field.setCompoundDrawables(new TextDrawable(this.label), null, null, null);
field.setText(this.value);

我做错了吗?

修改

我尝试使用此方法field.setCompoundDrawablesWithIntrinsicBounds(R.drawable.my_drawable, 0, 0, 0);并且它有效,但显然我无法使用它,因为drawable未定义为资源。

3 个答案:

答案 0 :(得分:3)

所以setBounds在你的Drawable的ctor中,或覆盖getIntrinsicWidth(),你需要检查哪一个工作

答案 1 :(得分:1)

你可以这样做

<EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/ic_launcher" >

答案 2 :(得分:0)

尝试这样做 -

field.setCompoundDrawablesWithIntrinsicBounds(new TextDrawable(this.label), null, null, null);

你必须设定界限。