Android 正确格式化空格

Android format properly spaces

我有一个 ListView,我使用 toString 在 ListView 中显示我的对象。

private String displayToUI() {
    DecimalFormat format = new DecimalFormat();
    format.setDecimalSeparatorAlwaysShown(false); //if overall = "X.0", the format will print "X"
    switch (FORMAT_TYPE) {
        case 0: // i.e "Guy - 5 | Host | Attending"
            String membership;
            String attending;
            if (this._playerishost == 1)
                membership = "Host";
            else
                membership = "Guest";
            if (this._playerisattending == 1)
                attending = "Attending";
            else
                attending = "Not Attending";
            return this._playername + " - " + format.format(this._playeroverall) + " | " + membership + " | " + attending;
        case 1: // i.e "Guy - 5"
            return this._playername + " - " + format.format(this._playeroverall);
    }
    return "0";
}

@Override
public String toString() {
    return displayToUI();
}

万一 FORMAT_TYPE=0 ,我想使用格式来正确显示对象,所以每一列都会在他的位置,函数会将对象显示为 table

这是现在的输出:

https://i.stack.imgur.com/HvvNH.png

编辑:

我使用了 String.format(@Pynnie 的回答),代码行现在是:

                return String.format("%-20s %-4s | %-5s | %s", this._playername, format.format(this._playeroverall), membership, attending);

但是输出不合适,看起来像下图:

https://i.stack.imgur.com/BEn27.png

另外,我的列表视图适配器代码:

public void editListView() {
    ArrayAdapter<Player> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, DBHandler.getNameListGeneral());
    lv = (ListView) findViewById(R.id.db_list_view);
    lv.setAdapter(arrayAdapter);
    registerForContextMenu(lv);
}

您可以尝试修改列表项的布局 xml,而不是尝试格式化字符串。

使用具有三个文本视图和水平方向的 LinearLayout。

我认为最简单的解决方案是使用 String.format() 正确格式化您的字符串。已经记录了正确的使用方法 here

使用等宽字体,即 "i" 的宽度与例如一个 "m"。这与 pynnies 答案一起应该有效