Это мое решение: класс EditText, который рисует суффикс за текстом. Существует два настраиваемых атрибута для определения текста суффикса и заполнения суффикса (в левом углу EditText).
public class EditTextWithSuffix extends EditText {
TextPaint textPaint = new TextPaint();
private String suffix = "";
private float suffixPadding;
public EditTextWithSuffix(Context context) {
super(context);
}
public EditTextWithSuffix(Context context, AttributeSet attrs) {
super(context, attrs);
getAttributes(context, attrs, 0);
}
public EditTextWithSuffix(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
getAttributes(context, attrs, defStyleAttr);
}
@Override
public void onDraw(Canvas c){
super.onDraw(c);
int suffixXPosition = (int) textPaint.measureText(getText().toString()) + getPaddingLeft();
c.drawText(suffix, Math.max(suffixXPosition, suffixPadding), getBaseline(), textPaint);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
textPaint.setColor(getCurrentTextColor());
textPaint.setTextSize(getTextSize());
textPaint.setTextAlign(Paint.Align.LEFT);
}
private void getAttributes(Context context, AttributeSet attrs, int defStyleAttr) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.EditTextWithSuffix, defStyleAttr, 0);
if(a != null) {
suffix = a.getString(R.styleable.EditTextWithSuffix_suffix);
if(suffix == null) {
suffix = "";
}
suffixPadding = a.getDimension(R.styleable.EditTextWithSuffix_suffixPadding, 0);
}
a.recycle();
}
}
здесь является определение атрибутов:
<resources>
<declare-styleable name="EditTextWithSuffix">
<attr name="suffix" format="string|reference" />
<attr name="suffixPadding" format="dimension" />
</declare-styleable>
</resources>
кажется решение, но я забыл сказать, что у меня есть это на моем EditText: '.setFilters (новый InputFilter [] {новый DecimalDigitsInputFilter (2) }); 'чтобы пользователь вставлял только десятичное число с двумя местами. В этом случае, как заставить его работать? В любом случае я использовал '.endsWith' вместо' .startWith', а затем '.setSelection (0);' потому что это суффикс, а не префикс – smartmouse
Не можете ли вы установить 'android: inputType =" number "и' android: maxLength = «2» 'в' xml', а затем поместить префикс в '.class', как я написал в ответ? – Apurva
В моем XML-файле у меня есть только 'android: inputType =" numberDecimal "' и в файле .class я пишу это: http://pastebin.com/b442zUt5 Как я сказал, если я удалю '.setFilters (новый InputFilter [ ] {new DecimalDigitsInputFilter (2)}); он работает; если я сохраню этот код, он не позволяет мне вводить ввод в EditText, кроме суффикса, который уже был там. – smartmouse