2014-10-24 22 views
15

Có cách nào để xác định xem thiết bị có ngôn ngữ từ phải sang trái không (giống như tiếng Ả Rập) trái với thứ gì đó từ trái sang phải (tiếng Anh)?android xác định xem thiết bị có phải là ngôn ngữ bên trái/bố cục

Something tương thích với các cấp API cũ (giảm đến 10) là cần thiết

SOLUTION

tôi đã kết thúc bằng cách sử dụng phương pháp xml trong câu trả lời chấp nhận. Xa hơn xuống dòng, tôi cũng nói thêm mã nêu ở đây cho trường hợp mà tôi không có quyền truy cập vào getResources()

Identifying RTL language in Android

chi tiết

Câu hỏi này vẫn nhận được rất nhiều lưu lượng ; một điều khác tôi muốn chỉ ra: Khi tôi hỏi điều này, tôi nghĩ rằng đó là một phần giúp giải quyết việc hiển thị các chevron trỏ khác nhau trong RTL và LTR - một cách trơn tru khác để thực hiện điều này là bằng cách đặt các tài nguyên có thể vẽ trong thư mục chuẩn và ldrtl - có nghĩa là không có mã yêu cầu để xác định cái nào để hiển thị!

Trả lời

31

Bạn có thể tạo một giá trị-ldrtl thư mục với một xml tệp có tên isrighttoleft.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_right_to_left">true</bool> 
</resources> 

và trong giá trị của bạn thư mục cùng một tập tin với:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_right_to_left">false</bool> 
</resources> 

Và cuối cùng trong Code:

boolean isRightToLeft = getResources().getBoolean(R.bool.is_right_to_left); 

Các giá trị-ldrtl sẽ chỉ được sử dụng trên thiết bị mà các thiết lập cụ thể (e . g. Ngôn ngữ) là các ngôn ngữ đọc từ phải sang trái.

+0

ah đây là một giải pháp tốt quá. tôi cũng thích cái này – Josh

+0

Cảm ơn. Tôi thường sử dụng "kỹ thuật" này để xác định thời tiết ứng dụng đang chạy trên thiết bị máy tính bảng hay không;) – ezcoding

+0

Tôi đã kết thúc bằng cách sử dụng giải pháp này bởi vì công việc trên tất cả mọi lúc, giải pháp của tôi không hoạt động bên trong onCreateView – Josh

0

Có, sử dụng hàm Bidi.getBaseLevel(), nó sẽ trả về 0 cho trái sang phải và 1 cho từ phải sang trái.

http://developer.android.com/reference/java/text/Bidi.html#getBaseLevel()

+0

Tôi sẽ phải có một phiên bản của Bidi đúng? Trong mọi trường hợp, tôi tìm thấy một giải pháp mà dường như làm việc. cảm ơn mặc dù! – Josh

+0

Có, bạn phải chứng minh một. – HappyCactus

+1

Vui lòng đăng giải pháp bạn đã tìm thấy để tham khảo trong tương lai. Cảm ơn. – HappyCactus

11

Gr, một chút nữa googling và tôi sẽ tìm thấy nó trước khi gửi bài:

if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) { 
    // ... 
} 
else { 
    // ... 
} 

http://developer.android.com/reference/android/support/v4/view/ViewCompat.html#getLayoutDirection(android.view.View)

+0

Bạn không cần có chế độ xem để tải xuống. Kiểm tra câu trả lời của tôi ở đây: https://stackoverflow.com/a/47119946/878126 –

1

Nếu điều này vẫn nhận được lưu lượng truy cập đáng kể, mọi người cũng nên xem xét Configuration.getLayoutDirection(), cho API 17+. Nó sẽ trả về LayoutDirection.LTR hoặc LayoutDirection.RTL. Tôi tưởng tượng ViewCompat.getLayoutDirection (android.view.View) trả về hướng thực sự được sử dụng để bố trí một khung nhìn cụ thể. Nếu bạn đang làm điều gì đó kỳ lạ, chẳng hạn như cố gắng xác định người nào sẽ ở bên cạnh màn hình trò chuyện (như tôi), điều này có thể được sử dụng.

+0

Có một cách để nó hoạt động trên tất cả các phiên bản API, mà không có chế độ xem, tại đây: https://stackoverflow.com/a/47119946/878126 –

7

Tôi nghĩ rằng đây là một cách tốt hơn:

val isLeftToRight = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR 

Documents:

https://developer.android.com/reference/android/support/v4/text/TextUtilsCompat.html#getLayoutDirectionFromLocale(java.util.Locale)

Hoặc, nếu bạn có minAPI 17 hoặc cao hơn, bạn chỉ có thể sử dụng này:

val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR 

Tài liệu:

https://developer.android.com/reference/android/text/TextUtils.html#getLayoutDirectionFromLocale(java.util.Locale)

+0

Đây phải là câu trả lời được chấp nhận. –

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