如何创建带有左侧货币和右侧值的编辑文本。

这是图像

java - 如何创建带有左侧货币和右侧值的编辑文本-LMLPHP

货币也可以作为编辑文字的一部分吗?或货币是不同的编辑文字?

我希望它只能是1个编辑文本。

最佳答案

使用SpannableString可以实现此目的。
  
  在activity_main.xml文件中。


<EditText
        android:id="@+id/edtCurrency"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="Test"
        android:textColor="#000"
        android:textSize="26sp" />



  将此添加到您的MainActivity.java中。


 EditText edtCurrency = (EditText) findViewById(R.id.edtCurrency);
 SpannableString spannableString = new SpannableString("USD  123.456");
 spannableString.setSpan(new UsdSpannableSuperScript((float) 1.0), 2, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 edtCurrency.setText(spannableString);



  这是UsdSpannableSuperScript.java


public class UsdSpannableSuperScript extends SuperscriptSpan {
    //divide superscript by this number
    protected int fontScale = 2;

    //shift value, 0 to 1.0
    protected float shiftPercentage = 0;

    //doesn't shift
    UsdSpannableSuperScript() {
    }

    //sets the shift percentage
    UsdSpannableSuperScript(float shiftPercentage) {
        if (shiftPercentage > 0.0 && shiftPercentage < 1.0)
            this.shiftPercentage = shiftPercentage;
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        //original ascent
        float ascent = tp.ascent();

        //scale down the font
        tp.setTextSize(tp.getTextSize() / fontScale);

        //get the new font ascent
        float newAscent = tp.getFontMetrics().ascent;

        //move baseline to top of old font, then move down size of new font
        //adjust for errors with shift percentage
        tp.baselineShift += (ascent - ascent * shiftPercentage)
                - (newAscent - newAscent * shiftPercentage);
    }

    @Override
    public void updateMeasureState(TextPaint tp) {
        updateDrawState(tp);
    }
}



  这是屏幕。


java - 如何创建带有左侧货币和右侧值的编辑文本-LMLPHP

09-11 20:30