为什么String.format()无法在Android TextView上运行?

时间:2013-09-07 22:56:23

标签: java android textview

我正在尝试在Android TextView上格式化文本。这是我在Java控制台中尝试的代码:

System.out.println(String.format("%-7s 56", "S"));
System.out.println(String.format("%-7s 56", "A(102)"));

输出是预期的,我的文字左对齐:

S       56
A(102)  56

不,我在Android TextView上尝试相同的代码:

mTextView.setText(String.format("%-7s 56\n", "S"));
mTextView.append(String.format("%-7s 56", "A(102)"));

这就是结果:

enter image description here

正如您所看到的,输出不是预期的,文本未对齐。我做错了什么?还有其他办法吗?

2 个答案:

答案 0 :(得分:8)

问题是我没有使用Monospaced字体。

  

等宽字体,也称为固定间距,固定宽度或   非比例字体,是一种字母和字符各自的字体   占用相同数量的水平空间

所以我在写入TextView之前只添加了这一行:

mTextView.setTypeface(Typeface.MONOSPACE);

答案 1 :(得分:0)

// I Think You Have To Achieve this in this way

// XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="5dp" >

        <TextView
            android:id="@+id/txtCal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/txtCalValue"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_weight="1" />
    </LinearLayout>

</LinearLayout>

// Activity
    TextView txtCal;
    TextView txtCalValue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtCal = (TextView) findViewById(R.id.txtCal);
        txtCalValue = (TextView) findViewById(R.id.txtCalValue);

        txtCal.setText("S\nA(102)");
        txtCalValue.setText("56\n56");

    }