Поддержка Unicode для Android
Я новичок в android. Я хочу знать, поддерживает ли поддержка Android Unicode. Если да, то как мы можем использовать его через java-код. Я написал программу
TextView tv = new TextView(this);
tv.setText("Hello, চন্দন");
setContentView(tv);
Бенгальские символы Юникода поступают в виде ящиков.
Спасибо заранее.
Ответы
Ответ 1
"Поддержка Unicode" - это просто стандарт кодировки символов - и отображение текста в Unicode способом, который может быть правильно прочитан, - это разные вещи.
Последний требует как надлежащего шрифта для script, так и сложного механизма визуализации текста, который применяет правила, встроенные в шрифт, для правильного отображения текста. В Windows это обрабатывается системной библиотекой под названием Uniscribe, в системах Apple ATSUI и системами Linux Pango. Android основан на Linux, но, к сожалению, Google, похоже, удалил части для обработки сложных скриптов. (Довольно странное решение, поскольку большинство устройств Android предназначены для связи, включая текст.) Сложные сценарии отлично работают на других мобильных устройствах с использованием операционной системы на базе Linux, такой как Nokia N9 и N900
Android также затрудняет пользователям установку дополнительных шрифтов или раскладок клавиатуры, которые могут использоваться различными приложениями без "укоренения" их телефона или планшета.
Несколько производителей Android-устройств внедрили поддержку самостоятельно (например, телефоны Sony Ericsson ST и MT, похоже, очень хорошо поддерживают Devanagari и другие индикаторы индикаторов.) На некоторых телефонах Android индикаторы True отображают ОК в браузере - потому что разработчик браузера добавил свою собственную поддержку - но не будет работать в других приложениях.
Смотрите: http://code.google.com/p/android/issues/detail?id=4153
До тех пор, пока эта проблема не будет исправлена на Android, большинство устройств, работающих с этой операционной системой, кажутся плохим выбором для пользователей, которые хотят использовать такие скрипты, как Devanagari, Tamil, Bengali, Kannada, Punjabi, Telugu, Tibetan, Khmer, Sinhala, Малаялам, бирманский и т.д. На их смартфоне или планшете.
Часть Android, нуждающаяся в исправлении для поддержки сложных скриптов, - libskia.so и libwebcore.so. Итак, если вы пишете приложения для поддержки индийских языков, вы можете попробовать заменить эти библиотеки своими собственными измененными версиями.
Ответ 2
Android поддерживает Unicode, но включенные шрифты не охватывают все символы Unicode, а рендеринг не поддерживает все типы скриптов. В частности, включенные шрифты охватывают только западноевропейские (латинские), кириллические, греческие и CJK персонажи. Даже если вы устанавливаете новые шрифты, похоже, что Android не поддерживает некоторые формы текстового макета текста, такие как Devanagari, как упоминалось в ошибка 4153. Я не достаточно знаком с бенгальским script, чтобы узнать, требует ли он какого-либо специального рендеринга, такого как Devanagari, но если это так, то он, скорее всего, не поддерживается на Android, даже если вы установите шрифт, который его поддерживает.
Ответ 3
Возможно, вам удастся обойти это со специальным шрифтом, как показано в этом ответе о Тамиле на Android.
Ответ 4
Бенгальский script нуждается в лигатурах, таких как Деванагари, так что это был небольшой шанс, что андроид будет правильно изображать бенгали.
Ответ 5
Мне понравился исчерпывающий ответ от Сахаджа.
Есть некоторые усилия, направленные на перенос движка рендеринга Harfbuzz-ng на Android. Вот ссылка на исходный код портирования Harfbuzz-ng для kannada, одного из индийских языков, текстового рендеринга.
Ответ 6
Android поддерживает Unicode из коробки. Тем не менее, вы определенно не поддерживаете язык. Вы можете найти список поддерживаемых локалей для каждой версии SDK, посмотрев Заметки о платформе.
Ответ 7
Создайте имя макета как 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>
Добавьте TextView и ListView в свой файл activity_main.xml
<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 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));
}
}
Надеюсь, это поможет вам...