2011-01-24 54 views
5

Tôi đang cố gắng cung cấp hỗ trợ Ngôn ngữ Ả Rập cho ứng dụng Android của mình. Hỗ trợ ngôn ngữ tiếng Ả Rập được cung cấp mặc định bởi Android 2.3. Vì vậy, tôi muốn biết liệu có bất kỳ thay đổi giao diện người dùng nào mà tôi cần thực hiện khi cung cấp hỗ trợ cho ngôn ngữ tiếng Ả Rập trong Android hay không.
Khi các chữ cái trong tiếng Ả Rập được viết từ phải sang trái, những hạn chế mà tôi cần phải làm theo trong thiết kế bố trí giao diện người dùng Android và cũng trong mã hóa là gì?
Hoặc nếu không thì Android sẽ tự chăm sóc đọc dữ liệu chúng tôi đã nhập, cho dù được nhập từ phải sang trái.Thiết kế giao diện người dùng cho ứng dụng Hỗ trợ tiếng Ả Rập trong Android

Có ai có thể giúp tôi phân loại vấn đề này không?

+0

Tôi cũng phải đối mặt với cùng một sự cố có thể ai đó đề xuất ... –

+0

tôi đang gặp vấn đề tương tự. tôi có thể tạo XML từ phải sang trái cho tiếng Ả Rập và từ trái sang phải cho tiếng Anh. tên tệp và id cho mỗi điều khiển phải giống nhau. có cách nào khác [dễ dàng] để làm những việc này? Hỗ trợ –

+0

@HirenDabhi RTL dễ thực hiện khi bạn có thói quen sử dụng Start & End thay vì phải và trái khi cần. Đọc nhận xét của tôi để biết thêm chi tiết. – Teovald

Trả lời

1

Tôi có sử dụng đoạn mã này và làm việc hoàn hảo thử nó ..

public static void change_setting_arabic(Context con) { 
           try { 
               Locale locale = new Locale("ar"); 

               Class amnClass = Class.forName("android.app.ActivityManagerNative"); 
               Object amn = null; 
               Configuration config = null; 

               // amn = ActivityManagerNative.getDefault(); 
               Method methodGetDefault = amnClass.getMethod("getDefault"); 
               methodGetDefault.setAccessible(true); 
               amn = methodGetDefault.invoke(amnClass); 

               // config = amn.getConfiguration(); 
               Method methodGetConfiguration = amnClass 
                       .getMethod("getConfiguration"); 
               methodGetConfiguration.setAccessible(true); 
               config = (Configuration) methodGetConfiguration.invoke(amn); 

               // config.userSetLocale = true; 
               Class configClass = config.getClass(); 
               Field f = configClass.getField("userSetLocale"); 
               f.setBoolean(config, true); 

               // set the locale to the new value 
               config.locale = locale; 

               // amn.updateConfiguration(config); 
               Method methodUpdateConfiguration = amnClass.getMethod(
                       "updateConfiguration", Configuration.class); 
               methodUpdateConfiguration.setAccessible(true); 
               methodUpdateConfiguration.invoke(amn, config); 

           } catch (Exception e) { 
               // TODO: handle exception 
               Log.d("error lang change-->", "" + e.getMessage().toString()); 
           } 
       } 
0

Một chút pro-tip từ Roman Nurik (từ nhóm Android):
Sử dụng trọng lực của START và END thay vì LEFT và RIGHT để hỗ trợ RTL tốt hơn. Mặc dù các hằng số chỉ được định nghĩa trong API 14 [0], chúng tương thích ngược vì (1) chúng được biên dịch tại thời gian biên dịch và (2) chúng tương đương về mặt chức năng với LEFT và RIGHT trên các thiết bị cũ vì chúng ít nhất byte có ý nghĩa:

START = 0x00800003
LEFT = 0x00000003
END = 0x00800005
QUYỀN = 0x00000005

Bạn có thể thấy sự khác biệt giữa START và trái với
<TextView layout_width=match_parent, gravity=start, text=[hebrew characters here]>
văn bản layo ut sẽ thấy các ký tự tiếng Do Thái của bạn và căn chỉnh văn bản đến ranh giới bên phải của TextView thay vì bên trái vì trọng lực = bắt đầu. Và lưu ý, trọng lực ngang mặc định của TextView là bắt đầu, không phải trái.

Vì vậy, bên trái luôn luôn là trái và phải luôn luôn đúng, nhưng bắt đầu và kết thúc có thể là trái hoặc phải, tùy thuộc vào ngôn ngữ.

Các vấn đề liên quan