附加两个字符串时TextView行为不正常

时间:2015-12-25 17:57:14

标签: android unicode textview

我正在编写一个简单的温度转换程序,以熟悉Android编程。用户输入的数字为TextView,并将其从华氏温度转换为摄氏温度,反之亦然,然后将答案放入public class ConverterUtil { //Convert to celsius public static String convertFahrenheitToCelsius(float fahrenheit) { float temperature = (fahrenheit - 32) * 5 / 9; DecimalFormat df = new DecimalFormat("#.#"); return df.format(temperature) + R.string.celsius_symbol; } //Convert to fahrenheit public static String convertCelsiustoFahrenheit(float celsius) { float temperature = (celsius * 9) / 5 + 32; //Append the unicode Celsius symbol (\u2103), then return DecimalFormat df = new DecimalFormat("#.#");a return df.format(temperature) + R.string.fahrenheit_symbol; //Append the unicode Fahrenheit symbol (\u2109), then return } } 。我想在显示之前在答案的末尾附加一个Unicode Celsius / Fahrenheit符号。当我没有附加符号时,它工作正常并显示正确的数字,但是当它试图将符号附加到结尾时,输出显示全部错误,最后有一长串数字(仍然没有Unicode符号)。

这是我的代码:

这是转换器实用程序类:

public void calculateTemperature(){

        RadioButton celsiusButton = (RadioButton) findViewById(R.id.button2);
        TextView output = (TextView) findViewById(R.id.output);

        if (text.getText().length() == 0) {
            output.setText("");
            return;
        }

        float inputValue = Float.parseFloat(text.getText().toString());
        String outputText = celsiusButton.isChecked() ? ConverterUtil.convertFahrenheitToCelsius(inputValue) : ConverterUtil.convertCelsiustoFahrenheit(inputValue);

        output.setText(outputText);
    }

这就是我所说的:

Treasure

如果我取出附加Unicode符号的部分,它看起来像这样: enter image description here

如果我把它放进去,我会得到这个: enter image description here

我该如何解决?

2 个答案:

答案 0 :(得分:0)

更改

return df.format(temperature) + R.string.fahrenheit_symbol;
return df.format(temperature) + R.string.celsius_symbol;

return df.format(temperature) + getString(R.string.fahrenheit_symbol);
return df.format(temperature) + getString(R.string.celsius_symbol);

R.string.fahrenheit_symbolR.string.celsius_symbol都是整数。您需要使用Context.getResources().getString()查找相关的字符串资源。

您需要将Context(例如致电Activity)传递给ConverterUtil

答案 1 :(得分:0)

看起来像你的fahrenheit_symbol&的资源ID celsius_symbol会附加到您的文本而不是实际角色。

试试这个,

public class ConverterUtil {

    //Convert to celsius
    public static String convertFahrenheitToCelsius(Context context, float fahrenheit) {
        float temperature = (fahrenheit - 32) * 5 / 9;
        DecimalFormat df = new DecimalFormat("#.#");
        return df.format(temperature) + context.getResources().getString(R.string.celsius_symbol);
    }

    //Convert to fahrenheit
    public static String convertCelsiustoFahrenheit(Context context, float celsius) {
        float temperature = (celsius * 9) / 5 + 32; //Append the unicode Celsius symbol (\u2103), then return

        DecimalFormat df = new DecimalFormat("#.#");a
        return df.format(temperature) + context.getResources().getString(R.string.fahrenheit_symbol); //Append the unicode Fahrenheit symbol (\u2109), then return
    }
}

改变你这样称呼的地方,

public void calculateTemperature(){

    RadioButton celsiusButton = (RadioButton) findViewById(R.id.button2);
    TextView output = (TextView) findViewById(R.id.output);

    if (text.getText().length() == 0) {
        output.setText("");
        return;
    }

    float inputValue = Float.parseFloat(text.getText().toString());
    String outputText = celsiusButton.isChecked() ? ConverterUtil.convertFahrenheitToCelsius(YourActivity.this, inputValue) : ConverterUtil.convertCelsiustoFahrenheit(YourActivity.this, inputValue);

    output.setText(outputText);
}