我是android新手。我想知道android是否支持Unicode。如果是,那么我们如何通过java代码使用它。我写了一个程序
TextView tv = new TextView(this);
tv.setText("Hello, চন্দন");
setContentView(tv);
孟加拉语的unicode角色就像盒子一样。
提前致谢。
答案 0 :(得分:34)
“支持Unicode” - 这只是一个字符编码标准 - 以一种可以正确读取的方式显示Unicode文本是完全不同的事情。
后者需要适用于相关脚本的正确字体和复杂的文本呈现引擎,该引擎应用嵌入在字体中的规则来正确显示文本。在Windows中,它由名为Uniscribe的系统库,ATSUI在Apple系统上以及Pango在Linux系统上处理。 Android基于Linux,但遗憾的是Google似乎已经删除了处理复杂脚本的部分。 (这是一个相当奇怪的决定,因为大多数Android设备都用于通信,包括文本。)复杂脚本在使用基于Linux的操作系统(如诺基亚N9和N900)的其他移动设备上运行良好
Android还使用户难以安装可供不同应用程序使用的其他字体或键盘布局,而无需“生根”他们的手机或平板电脑。
一些Android设备制造商已经实现了自己的支持(例如,索尼爱立信的ST和MT系列手机似乎很好地支持了梵文和其他印度语片段。)在某些Android手机上,印度语脚本将在浏览器中呈现正常 - 因为浏览器开发人员已经添加了他们自己的支持 - 但不会在其他应用程序中工作。
请参阅:http://code.google.com/p/android/issues/detail?id=4153
在Android中正确修复此问题之前,对于想要使用梵文,泰米尔语,孟加拉语,卡纳达语,旁遮普语,泰卢固语,西藏语,高棉语,僧伽罗语等剧本的用户来说,运行此操作系统的大多数设备似乎都是一个糟糕的选择。他们的智能手机或平板电脑上的马拉雅拉姆语,缅甸语等。
需要修复以支持复杂脚本的Android部分是libskia.so和libwebcore.so。因此,如果您正在编写支持印度语言的应用程序,您可能希望尝试使用自己的修改版本替换这些库。
答案 1 :(得分:8)
Android确实支持Unicode,但包含的字体不包括所有Unicode字符,并且渲染不支持所有类型的脚本。特别是,所包含的字体仅涵盖西欧(拉丁文),西里尔文,希腊文和CJK字符。即使你安装了新的字体,似乎Android也没有像bug 4153中提到的那样正确支持某种形式的指示文字布局,如梵文。我对孟加拉语脚本不太熟悉,知道它是否需要任何像Devanagari那样的特殊渲染,但如果确实如此,那么即使安装了支持它的字体,它也可能在Android上不受支持。
答案 2 :(得分:3)
您可以使用专用字体解决此问题,如this SO answer about Tamil on Android中所示。
答案 3 :(得分:1)
孟加拉语剧本需要像天城座这样的连字,所以,机器人很难有机会正确渲染孟加拉语。
答案 4 :(得分:1)
我喜欢霎哈嘉的全面答案。
正在努力将Harfbuzz-ng渲染引擎移植到android。这是一个链接到source code of porting Harfbuzz-ng for kannada,一种印度语言,文本呈现。
答案 5 :(得分:0)
Android支持开箱即用的Unicode。但是,您可能不支持特定语言。您可以通过查看Platform Notes找到每个SDK版本支持的区域设置列表。
答案 6 :(得分:0)
在布局
中创建布局名称作为list.xml<?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>
在activity_main.xml
中添加TextView和ListView<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));
}
}
希望这会帮助你......