這是我的解決方案:在文本後面繪製後綴的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(新輸入過濾器[] {新DecimalDigitsInputFilter(2) });'讓用戶只用2位插入小數。在這種情況下如何使它工作?無論如何,我使用'.endsWith'而不是'.startWith',然後'.setSelection(0);'因爲它是後綴,而不是前綴 – smartmouse 2015-02-24 22:20:03
你不能設置'android:inputType =「number」'和'android:maxLength = 「xml」中的「2」,然後將前綴放在'.class'中,就像我在回答中寫的一樣? – Apurva 2015-02-25 04:03:12
在我的XML文件中,我只有'android:inputType =「numberDecimal」',並在.class文件中編寫了這個:http://pastebin.com/b442zUt5 正如我所說如果我刪除'.setFilters(new InputFilter [ ] {新的DecimalDigitsInputFilter(2)});'它的工作;如果我保留這段代碼,它不會讓我在EditText中寫入輸入,除了已經存在的後綴。 – smartmouse 2015-02-25 22:23:17