2014-10-24 3 views
15

기기가 왼쪽에서 오른쪽 (영어) 인 것과 달리 왼쪽에서 오른쪽으로 쓰는 언어 (아랍어와 같은)인지 확인하는 방법이 있습니까? 이전의 API 레벨 (10 아래)와 호환android 기기가 오른쪽에서 왼쪽 언어/레이아웃인지 확인합니다.

뭔가

솔루션

내가 허용 대답에서 XML 방법을 사용하여 종료해야합니다. 멀리 선 아래로 난의 GetResources 액세스()

Identifying RTL language in Android

대한 추가 정보를 원하시면

을 가지고 있지 않은 경우, 나는 또한이 질문은 여전히 ​​많은 트래픽을 얻을 경우 여기 표시된 코드를 추가 ; 내가 지적하고 싶었던 점 : 원래이 질문을했을 때 부분적으로 RTL 대 LTR에서 서로 다른 포인팅 쉐브론을 나타내는 데 도움이되었다고 생각합니다.이를 수행하는 또 다른 매끄러운 방법은 드로어 블 리소스를 표준에 배치하고 ldrtl 디렉토리에 배치하는 것입니다. 표시 할 코드를 결정하는 데 필요한 코드가 없습니다!

답변

31

당신은 XML과 함께 값-ldrtl 폴더를 만들 수 있습니다 isrighttoleft.xml이라는 파일 :

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

폴더와 같은 파일 : 코드에

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

그리고 마지막으로 :

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

값-ldrtl 만 장치 특정 설정 (예에 사용됩니다 . 지. 언어)는 오른쪽에서 왼쪽으로 읽는 언어입니다.

+0

아 이것은 좋은 해결책입니다. 나는 이것도 좋아한다. – Josh

+0

고마워. 나는 일반적으로이 "기술"을 사용하여 앱이 태블릿 장치에서 실행 중인지 여부를 결정합니다.) – ezcoding

+0

위의 코드가 항상 작동하기 때문에 결국이 솔루션을 사용하여 종료되었습니다. 내 솔루션은 onCreateView 내에서 작동하지 않습니다. – Josh

0

예, Bidi.getBaseLevel() 함수를 사용하면 왼쪽에서 오른쪽으로 0, 오른쪽에서 왼쪽으로 1이 반환됩니다.

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

+0

나는 Bidi의 인스턴스를 가지고 있어야할까요? 어쨌든, 나는 효과가있는 해결책을 발견했습니다. 그래도 고마워! – Josh

+0

네, 그렇습니다. – HappyCactus

+1

나중에 참조 할 수 있도록 찾은 해결책을 게시하십시오. 감사. – HappyCactus

1

여전히 많은 트래픽이 발생하는 경우 사용자는 API 17+의 경우 Configuration.getLayoutDirection()을 고려해야합니다. LayoutDirection.LTR 또는 LayoutDirection.RTL 중 하나를 반환합니다. ViewCompat.getLayoutDirection (android.view.View)은 특정 뷰의 레이아웃에 실제로 사용 된 방향을 반환한다고 생각합니다. 어떤 사람이 채팅 화면의 어느쪽에 있는지 (예 : 나 같은) 결정해야하는 등의 이상한 일을하는 경우이 방법이 유용 할 수 있습니다.

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

문서 :

+0

보기없이 모든 API 버전에서 작동하는 방법은 다음과 같습니다. https://stackoverflow.com/a/47119946/878126 –