2013-07-04 152 views
3

我正在創建一個支持多語言的android應用程序。目前它支持超過15種不同的語言。目前爲止一切都很好。阿拉伯文+英文文本在android中顯示爲空TextView

但現在需要將英語和阿拉伯語混合使用。我有一個ListView來呈現值的ArrayList。 ArrayList幾乎沒有阿拉伯文字,很少有元素是英文的。

阿拉伯語在整個應用程序中顯示得很好。但英文行不顯示在TextView上。它正在打印日誌。

編輯1 它在android 2.3中顯得很好。所以,我猜測RTL可能會導致問題。

編輯2 下面是應用程序的屏幕截圖。正如你可以在右側看到一些行是白色的。

這裏在右側行中,一些從SQLite數據庫中提取的數據以及一些從Web中獲取的數據。從網頁獲取的數據是阿拉伯文,但SQLite數據是英文的。

Adapter getView()方法工作正常。在getView()內部打印英文和阿拉伯文數據。在將文本設置到列表行之後,我甚至打印了getText(),並且getText()甚至以英文打印。看起來英文行沒有被打印或更新。

Attached Screenshot

任何幫助深表感謝。

+1

你可以發佈一些代碼或你有什麼屏幕截圖 – androidqq6

+1

@ androidqq6.I更新了屏幕截圖的問題。 –

+0

你可以使用canvas.drawText()沒有問題的同時繪製阿拉伯文和英文字符串? –

回答

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

我不是很確定,但我相信RTL支持wad可以從Android 4.0中使用。它不是非常穩定,導致渲染問題。幸運的谷歌已經在4.2中修復了這個問題,它效果很好。

+0

這確實很奇怪,感謝分享解決方案! –

+0

我有類似的問題與阿拉伯語,我的列表視圖有看不見的文字,我發現setSingleLine問題,所以我刪除了setSingleLine();並使用setMaxLines(1); setEllipsize(TextUtils.TruncateAt.END);希望這可以幫助某人。 – Diljeet

相關問題