Android: setText уничтожает отформатированную строку

Я новичок в программировании Android и работаю над приложением по управлению финансами. В настоящее время я столкнулся с проблемой, что метод setText() уничтожает формат строки, который я передаю.

У меня есть класс Account, в котором есть обычный метод toString, который возвращает отформатированную строку информации об учетной записи:

public String toString(int colWidth1, int colWidth2, int colWidth3) {
    return String.format("%-" + colWidth1 + "s", myDisplayName) +
            String.format("%-" + colWidth2 + "s", myBalance) + 
            String.format("%-" + colWidth3 + "s", myInterestRate);
}

И в деятельности AccountInfo у меня есть:

// create a table that contains all account information of the current user
    TableLayout accountTable = (TableLayout) findViewById(R.id.tableLayout_account_details);
    List<Account> accountList = accountManager.getAllAccounts(CurrentUser.getCurrentUser().getUserName());

    // for each account, display name, balance and interest rate
    for (int i = 0; i < accountList.size(); i++) {
        Account account = accountList.get(i);
        TableRow accEntry = new TableRow(this);
        Button accButton = new Button(this);
        accButton.setText(account.toString(10, 10, 10));
        Log.i("account info", account.toString(10, 10, 10));

        // button format
        TableRow.LayoutParams params = new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        params.setMargins(0, -7, 0, -10);
        accButton.setLayoutParams(params);
        accButton.setGravity(Gravity.LEFT);

        // add button to the row
        accEntry.addView(accButton);

        // add row to the table
        accountTable.addView(accEntry);

        // ...more code here for button click listener
    }

Хотя мой logcat печатает красиво отформатированную строку так, как я хотел, текст на кнопке не совпадает

(только что понял, что мне не хватает репутации, чтобы опубликовать скриншот моего приложения...)

Я пытался отлаживать долго, но до сих пор не имею понятия. Любая помощь высоко ценится!!!

РЕДАКТИРОВАТЬ: скриншот

2 ответа

Решение

Мой сосед по комнате указывает на проблему! Он классный!!!

Выравнивание отключено, потому что шрифт не моноширинный. Просто делай

android:typeface="monospace"

в макете xml и проблема решена!!!

Я хочу ответить от Android Studio:

Не объединяйте текст, отображаемый с помощью setText. Используйте строку ресурса с заполнителями.

При вызове TextView#setText:

Никогда не вызывайте Number#toString() для форматирования чисел; он не будет правильно обрабатывать разделители дробей и специфичные для локали цифры. Попробуйте вместо этого использовать формат String# с правильными спецификациями формата (%d или%f).

Не передавайте строковый литерал (например, "Hello") для отображения текста. Закодированный текст не может быть должным образом переведен на другие языки. Попробуйте вместо этого использовать строки ресурсов Android.

Не создавайте сообщения, объединяя фрагменты текста. Такие сообщения не могут быть должным образом переведены.

Другие вопросы по тегам