字符串格式在Android Studio中的ListView中无法正确显示

时间:2019-03-25 04:01:41

标签: java android format

我的目标是创建一个包含一个单词和一个数字的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 个答案:

答案 0 :(得分:1)

是的,“每个字符的长度不同”是正确的。

要么您必须像@Pankaj Kumar所说的那样并排使用2个textview。

但是,如果您不想这样做,则可以使用任何等宽字体。

示例

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);

这是某些等宽字体的link