我是android的新手。我想知道android是否支持Unicode。如果支持,那么我们如何通过java代码使用它。我已经编写了一个程序。
TextView tv = new TextView(this);
tv.setText("Hello, চন্দন");
setContentView(tv);
孟加拉语的Unicode字符显示成了方框。
谢谢提前。
我是android的新手。我想知道android是否支持Unicode。如果支持,那么我们如何通过java代码使用它。我已经编写了一个程序。
TextView tv = new TextView(this);
tv.setText("Hello, চন্দন");
setContentView(tv);
孟加拉语的Unicode字符显示成了方框。
谢谢提前。
“支持Unicode”——这只是一个字符编码标准,以正确阅读显示Unicode文本需要同时具备合适的字体和一个能够应用嵌入在字体中规则来正确显示文本的复杂文本渲染引擎。在Windows系统中,使用名为Uniscribe的系统库来完成,苹果操作系统采用ATSUI,Linux系统采用Pango。Android基于Linux,但不幸的是,Google似乎已经删除了处理复杂脚本的部分(这是个相当奇怪的决定,因为大多数Android设备都是用于通信,包括文字)。在其他使用基于Linux操作系统的移动设备上,例如Nokia N9和N900,复杂脚本可以正常工作。
Android还为用户安装额外字体或键盘布局提供了困难,用户需要通过“root”他们的手机或平板电脑才能在不同应用程序中使用它们。
一些Android设备制造商已经自行实现了支持(例如,Sony Ericsson的ST和MT系列手机似乎非常支持天城文和其他印度语言脚本)。在某些Android手机上,印度语脚本将在浏览器中呈现正常,因为浏览器开发者已经添加了自己的支持,但在其他应用程序中将无法工作。
请参阅:http://code.google.com/p/android/issues/detail?id=4153
在Android系统中,要想使用像天城文、泰米尔文、孟加拉文、卡纳达文、旁遮普语、泰卢固语、藏文、高棉文、僧伽罗文、马拉雅拉姆文、缅甸文等脚本的用户,由于该系统存在缺陷,大多数使用该操作系统的设备似乎都不是一个好的选择。
需要修复以支持复杂脚本的部分在Android系统中为libskia.so和libwebcore.so。因此,如果您编写支持印度语言的应用程序,可以尝试用自己修改过的版本替换这些库。
/system/library
中的*.so文件。 - Hieu RockerAndroid支持Unicode,但所包含的字体并不涵盖所有的Unicode字符,并且渲染也不支持所有类型的脚本。特别是,所包含的字体仅涵盖西欧(拉丁)、斯拉夫、希腊和CJK字符。即使您安装了新的字体,似乎Android并不能正确地支持一些形式的印度语文本布局,如bug 4153中所述。我对孟加拉语文字体不熟悉,不知道它是否需要像印地语一样的特殊渲染,但如果需要,则即使您安装支持该语言的字体,Android也可能不支持该语言。
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="20sp" >
</TextView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/textView" />
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listView" />
MainActivity.java
public class MainActivity extends AppCompatActivity {
ListView listView;
TextView textView;
static final String[] BANGLA = new String[] {
"Barguna District (বরগুনা)",
"Barisal District (বরিশাল)",
"Bhola District (ভোলা)",
"Jhalokati District (ঝালকাঠি)",
"Patuakhali District (পটুয়াখালী)",
"Pirojpur District (পিরোজপুর)",
"Bandarban District (বান্দরবান)",
"Brahmanbaria District (ব্রাহ্মণবাড়ীয়া)",
"Chandpur District (চাঁদপুর)",
"Chittagong District (চট্টগ্রাম)",
"Comilla District (কুমিল্লা)",
"Cox's Bazar District (কক্সবাজার)",
"Feni District (ফেনী)",
"Khagrachhari District (খাগড়াছড়ি)",
"Lakshmipur District (লক্ষ্মীপুর)",
"Noakhali District (নোয়াখালী)",
"Rangamati District (রাঙ্গামাটি)",
"Dhaka District (ঢাকা)",
"Faridpur District (ফরিদপুর)",
"Gazipur District (গাজীপুর)",
"Gopalganj District (গোপালগঞ্জ)",
"Kishoreganj District (কিশোরগঞ্জ)",
"Madaripur District (মাদারীপুর)",
"Manikganj District (মানিকগঞ্জ)",
"Munshiganj District (মুন্সীগঞ্জ)",
"Narayanganj District (নারায়ণগঞ্জ)",
"Narsingdi District (নরসিংদী)",
"Rajbari District (রাজবাড়ী)",
"Shariatpur District (শরীয়তপুর)",
"Tangail District (টাঙ্গাইল)",
"Bagerhat District (বাগেরহাট)",
"Chuadanga District (চুয়াডাঙ্গা)",
"Jessore District (যশোর)",
"Jhenaidah District (ঝিনাইদহ)",
"Khulna District (খুলনা)",
"Kushtia District (কুষ্টিয়া)",
"Magura District (মাগুরা)",
"Meherpur District (মেহেরপুর)",
"Narail District (নড়াইল)",
"Satkhira District (সাতক্ষিরা)",
"Jamalpur District (জামালপুর)",
"Mymensingh District (ময়মনসিংহ)",
"Netrakona District (নেত্রকোনা)",
"Sherpur District (শেরপুর)",
"Bogra District (বগুড়া)",
"Joypurhat District (জয়পুরহাট)",
"Naogaon District (নওগাঁ)",
"Natore District (নাটোর)",
"Chapainawabganj District (নওয়াবগঞ্জ)",
"Pabna District (পাবনা)",
"Rajshahi District (রাজশাহী)",
"Sirajgonj District (সিরাজগঞ্জ)",
"Dinajpur District (দিনাজপুর)",
"Gaibandha District (গাইবান্ধা)",
"Kurigram District (কুড়িগ্রাম)",
"Lalmonirhat District (লালমনিরহাট)",
"Nilphamari District (নীলফামারী)",
"Panchagarh District (পঞ্চগড়)",
"Rangpur District (রংপুর)",
"Thakurgaon District (ঠাকুরগাঁও)",
"Habiganj District (হবিগঞ্জ)",
"Moulvibazar District (মৌলভীবাজার)",
"Sunamganj District (সুনামগঞ্জ)",
"Sylhet District (সিলেট)"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
textView= (TextView)findViewById(R.id.textView);
textView.setText(Html.fromHtml("বাংলাদেশের জেলা সমূহ"));
edittext = (EditText)findViewById(R.id.editText);
imageView= (ImageView)findViewById(R.id.imageView);
listView=(ListView)findViewById(R.id.listView);
listView.setAdapter(new ArrayAdapter<String>(this,R.layout.list, BANGLA));
}
}
孟加拉文需要像天城体一样的连字,因此,安卓很难正确地呈现孟加拉文。
我很喜欢Sahaja提供的全面回答。
目前正在进行一些工作,将Harfbuzz-ng渲染引擎移植到Android平台。以下是一个链接,其中包含将Harfbuzz-ng移植到印度语言之一卡纳达语的源代码,用于文本渲染。