安卓TextView控件中的阿拉伯文和英文文本显示为空

3

我正在创建一款支持多语言的Android应用程序。目前,它支持超过15种不同的语言,一切都进行得很顺利。

但现在需求是将英语与阿拉伯语混合使用。我有一个ListView来呈现一个值的ArrayList。ArrayList中有一些阿拉伯文本,还有一些元素是英文。

阿拉伯语在整个应用程序中都显示正常。但是,在TextView上没有显示英文行。它会被打印在日志中。

编辑-1 在Android 2.3中看起来很好。所以,我猜测RTL可能是问题的原因。

编辑-2 以下是应用程序的屏幕截图。如您所见,在右侧有一些白色的行。

在右侧行中,某些数据是从SQLite数据库获取的,而某些数据则是从Web获取的。从Web获取的数据是用阿拉伯语编写的,但SQLite数据是用英语编写的。

Adapter getView()方法运作良好。在getView()内部,英语和阿拉伯语的数据都被打印出来了。我甚至在设置列表行的文本后打印了getText(),并且getText()也以英文打印。看起来,英文行没有被打印或更新。

Attached Screenshot

非常感谢您的任何帮助。


1
你能否发布一些代码或屏幕截图来展示你所拥有的内容? - androidqq6
1
@androidqq6。我已经更新了问题并附上了截图。 - Nilanchala
你能否使用canvas.drawText()同时绘制阿拉伯语和英语字符串而不出现问题? - Steven Huang
@StevenHuang。是的,我可以同时使用英语和阿拉伯语。在我的适配器中,我已经硬编码了前两行以显示英语,并且它正在工作。 - Nilanchala
大家好,我已经修复了这个缺陷。谢谢。 - Nilanchala
显示剩余2条评论
1个回答

5

这是关于ListView渲染问题的一个奇怪的观察。我只在适配器为空时初始化它,任何更改或刷新都使用notifyDataSetChanged()完成。但这会导致渲染延迟。

if (mOptionsAdapter == null) {
        mOptionsAdapter = new CategoriesAdapter(mContext);
        final ArrayList<CategoriesItem> optionsList = getData();
        mOptionsAdapter.setDatasource(optionsList);
        mOptionsyListView.setAdapter(mOptionsAdapter);
        mOptionsAdapter.notifyDataSetChanged();
} else {
        mOptionsAdapter = new CategoriesAdapter(mContext);
        final ArrayList<CategoriesItem> optionsList = getData();
        mOptionsyListView.setAdapter(mOptionsAdapter);
        mOptionsAdapter.setDatasource(optionsList);
        mOptionsAdapter.notifyDataSetChanged();
}

更改为每次将适配器置为空,并重新创建可以解决问题。

mOptionsAdapter = null;
mOptionsAdapter = new CategoriesAdapter(mContext);
final ArrayList<CategoriesItem> optionsList = getData();
mOptionsAdapter.setDatasource(optionsList);
mOptionsyListView.setAdapter(mOptionsAdapter);
mOptionsAdapter.notifyDataSetChanged();

我不是很确定,但我相信从Android 4.0开始提供了RTL支持。它并不是非常稳定,会导致渲染问题。幸运的是,Google在4.2中修复了这个问题,并且现在效果非常好。


我曾经遇到过阿拉伯语的类似问题,我的列表视图中的文本是不可见的。我在setSingleLine中找到了问题,所以我删除了setSingleLine();并使用了setMaxLines(1); setEllipsize(TextUtils.TruncateAt.END); 希望这能帮助到某些人。 - Diljeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接