2014-01-30 1 views
6

Я реализую Drawable как текст в начале моего EditText с использованием setCompoundDrawables, но я получаю неправильные результаты. Что мне нужно для моего текста, чтобы начать после Drawable при наборе, но вместо я получаю этуsetCompoundDrawables EditText Text Overlapping

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); 

я делаю что-то не так?

EDIT

Я попытался с помощью этого метода field.setCompoundDrawablesWithIntrinsicBounds(R.drawable.my_drawable, 0, 0, 0); и он работает, но очевидно, что я не могу использовать его, потому что рисуем не определен как ресурс.

ответ

3

так SetBounds в вашем CTOR вытяжке, либо переопределить getIntrinsicWidth(), вам нужно будет проверить, какой из них работает

+1

Спасибо, что сработал. Просто перегрузите getIntrinsicWidth() и верните ширину текста – Neil

+0

из любопытства: setBounds() did not work? – pskink

+0

Нет ограничений, только измененные размеры Drawable, не меняли начальную позицию – Neil

0

Try сделать как this-

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

Вы должны установить границы.

+0

Спасибо за ответ! Я пробовал это до публикации вопроса, никаких положительных результатов. Я думаю, что это может быть близко к ответу, но чего-то не хватает. – Neil

+0

Если я использую этот метод 'field.setCompoundDrawablesWithIntrinsicBounds (R.drawable.my_drawable, 0, 0, 0);' он работает, но, очевидно, я не могу его использовать, потому что drawable не определяется как ресурс. – Neil

+0

Я думаю, что ваш текст не является привлекательным, поэтому его не работает для вас здесь. –

1

Вы можете сделать, как что

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

Это поддерживается только с Android Api v14. Мне нужно поддержать от api v8 – Neil

+0

Кто сказал? Я также пробовал в версии 2.2, пожалуйста, проверьте еще раз. – Rajan

+0

Даже если я ошибаюсь @Rajan, я не могу использовать этот метод, потому что текст должен быть динамическим. – Neil