Форматирование строк не отображается должным образом в ListView в Android Studio - PullRequest
0 голосов
/ 25 марта 2019

Моя цель - создать ListView, который содержит слово, за которым следует некоторое число. Теперь для этого списка длина слова варьируется от записи к записи, но каждое число должно быть точно такой же ширины.

Вот пример желаемого вывода (в командной строке):

enter image description here

Естественно, для этой проблемы первое, что приходит на ум, - это просто использовать String.format для правильного заполнения нужного количества пробелов в каждом слове, но это не совсем дает правильный вывод.

Вроде так:

ArrayList<String> arr = new ArrayList<>();

arr.add(String.format("%-10s", "aaaaaa") + "10");
arr.add(String.format("%-10s", "aa") + "10");
arr.add(String.format("%-10s", "asdkaosds") + "10");
arr.add(String.format("%-10s", "aaaaaaaaaa") + "10");

ArrayAdapter<String> itemsAdapter = new ArrayAdapter<(this,android.R.layout.simple_list_item_1,arr);

ListView listView = findViewById(R.id.answers);

listView.setAdapter(itemsAdapter);

Выход:

enter image description here

Простая замена пробелов звездочками показывает, что было добавлено соответствующее количество пробелов

arr.add(String.format("%-10s", "aaaaaa").replace(' ','*') + "10");
arr.add(String.format("%-10s", "aa").replace(' ','*') + "10");
arr.add(String.format("%-10s", "asdkaosds").replace(' ','*') + "10");
arr.add(String.format("%-10s", "aaaaaaaaaa").replace(' ','*') + "10");

Вывод:

enter image description here

Единственное другое логическое объяснение состоит в том, что длина каждого символа варьируется.

Итак, мой вопрос:

Как мне решить эту проблему?

1 Ответ

1 голос
/ 25 марта 2019

Да, вы правы в том, что «длина каждого символа варьируется».

Либо вам нужно взять 2 просмотра текста рядом, как упомянуто @Pankaj Kumar.

Но если выесли вы не хотите этого делать, вы можете использовать любой моноширинный шрифт.

Пример

ArrayList<String> arr = new ArrayList<>();

    arr.add(String.format("%-10s", "aaaaaa") + "10");
    arr.add(String.format("%-10s", "aa") + "10");
    arr.add(String.format("%-10s", "asdkaosds") + "10");
    arr.add(String.format("%-10s", "aaaaaaaaaa") + "10");
    final Typeface mTypeface = Typeface.createFromAsset(getAssets(), "fonts/DroidSansMono.ttf");

    ArrayAdapter<String> itemsAdapter =new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr){
        @NonNull
        @Override
        public View getView(int position, View convertView, ViewGroup parent){
            TextView item = (TextView) super.getView(position,convertView,parent);

            item.setTypeface(mTypeface);

            return item;
        }
    };
    ListView listView = findViewById(R.id.answers);

    listView.setAdapter(itemsAdapter);

Вот ссылка некоторых моноширинных шрифтов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...