câu trả lời của @ cyanide có cách tiếp cận đúng nhưng là một lỗi nghiêm trọng.
Character.getDirectionality trả về Bi-directional (bidi) character type. Văn bản từ trái sang phải là loại có thể dự đoán L và từ phải sang trái cũng có thể được dự đoán là loại R. NHƯNG, văn bản Ả Rập trả về một loại khác, gõ AL.
Tôi đã thêm séc cho cả loại R và loại AL và sau đó kiểm tra thủ công mọi ngôn ngữ RTL Android đi kèm: tiếng Hebrew (Israel), tiếng Ả Rập (Ai Cập) và tiếng Ả Rập (Israel).
Như bạn có thể thấy, điều này bỏ qua các ngôn ngữ từ phải sang trái khác, vì vậy tôi lo ngại rằng Android thêm các ngôn ngữ này, có thể có vấn đề tương tự và có thể không nhận thấy ngay lập tức.
Vì vậy, tôi đã thử nghiệm thủ công từng ngôn ngữ RTL.
- Arabic (العربية) = gõ AL
- Kurd (کوردی) = gõ AL
- Farsi (فارسی) = gõ AL
- Urdu (اردو) = gõ AL
- Hebrew (עברית) = loại R
- Yiddish (ייִדיש) = loại R
Vì vậy, nó trông như thế này nên làm việc grea t:
public static boolean isRTL() {
return isRTL(Locale.getDefault());
}
public static boolean isRTL(Locale locale) {
final int directionality = Character.getDirectionality(locale.getDisplayName().charAt(0));
return directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT ||
directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC;
}
Cảm ơn @cyanide đã gửi cho tôi đúng hướng!
Nguồn
2014-04-21 18:44:37
Thật không may "thêm ở mức API 17" để nó sẽ không hoạt động trên các phiên bản cũ hơn. – EvZ
Giải pháp này hoạt động khi bạn sử dụng "Hướng bố cục lực RTL" trong tùy chọn nhà phát triển! –
Đó là cách bạn có thể làm điều đó cho các cấp API dưới 17: http://stackoverflow.com/a/28568974/170842. – Michael