Android Custom TextView显示货币

时间:2015-01-10 14:18:38

标签: android textview decimalformat

我需要为textview设置一个掩码,将其文本转换为特定的样式(货币,我自己虽然像这样:Rls ###,###,###,###)但我需要能够在以后获得它的原始文本。我该怎么办?

=============================================== =======

说我会将此字符串传递给TextView:2120000

用户应该看到:Rls 2,120,000

但.getText方法应返回:2120000

=============================================== =======

格式化代码如下:

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("Rls ###,###,###,###", symbols);
String prezzo = decimalFormat.format(Integer.parseInt(textTemp));

任何帮助将不胜感激

5 个答案:

答案 0 :(得分:2)

正确的方法是: 要将自定义TextView创建为Java类

public class RialTextView extends TextView {

    String rawText;

    public RialTextView(Context context) {
        super(context);

    }

    public RialTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public RialTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        rawText = text.toString();
        String prezzo = text.toString();
        try {

            DecimalFormatSymbols symbols = new DecimalFormatSymbols();
            symbols.setDecimalSeparator(',');
            DecimalFormat decimalFormat = new DecimalFormat("###,###,###,###", symbols);
            prezzo = decimalFormat.format(Integer.parseInt(text.toString()));
        }catch (Exception e){}

        super.setText(prezzo, type);
    }

    @Override
    public CharSequence getText() {

        return rawText;
    }
}

并在XML而不是<TextView标记中 使用这样的东西:

<com...RialTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Price"
        android:id="@+id/tv_itemgriditems_Price"
        android:layout_below="@+id/tv_itemgriditems_Remain"
        android:layout_centerHorizontal="true"
        android:textSize="15sp"
        />

答案 1 :(得分:0)

每次输入输入字符时都必须修改edittext。试试这段代码

EditText currencyEditText= (EditText)findViewById(R.id.medittext);
searchTo.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
        symbols.setDecimalSeparator(',');
        DecimalFormat decimalFormat = new DecimalFormat("Rls ###,###,###,###", symbols);
        String prezzo = decimalFormat.format(Integer.parseInt(s));
        currencyEditText.setText(prezzo);
    } 

});

答案 2 :(得分:0)

假设你有一个班级MyParser

public class MyParser {

    //...
    public static String getRawValue(value) {
        //Converts value to raw value, for instance, converts Rls 2,120,000 to 2120000
    }

    public static String getViewValue(value) {
        //Converts value to view value, for instance, converts 2120000 to Rls 2,120,000
    }
    //...
}

现在,让我们有另一个名为MyTextView的课程:

public class MyTextView extends TextView {

    public CharSequence getText () {
        return MyParser.getRawValue(super.getText());
    }

    public void setText (CharSequence text, TextView.BufferType type) {
        super.setText(MyParser.getViewValue(text), type)
    }

}

答案 3 :(得分:0)

您可以使用与格式化字符串相同的DecimalFormat对象以另一种方式解析它:

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("Rls ###,###,###,###", symbols);

try {
    // get int value
    int i = decimalFormat.parse(textView.getText().toString()).intValue();
} catch (ParseException e) {
    // handle error here
}

答案 4 :(得分:0)

用于转换为长格式的格式

    public String FormatCost(long cost){
    try {
        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
        symbols.setDecimalSeparator(',');
        DecimalFormat decimalFormat = new DecimalFormat("###,###,###,###", symbols);
        return decimalFormat.format(Integer.parseInt(cost+""));
    }catch (Exception e) {
        return cost + "";
    }
}