라떼는말이야

[Android] marginLeft 대신 marginStart를 사용해야 하는 이유 본문

안드로이드

[Android] marginLeft 대신 marginStart를 사용해야 하는 이유

MangBaam 2021. 9. 3. 15:23
반응형

개요

일반적인 디자인에서 marginLeft와 marginStart는 동일한 효과를 가진다.

마찬가지로 marginRight와 marginEnd는 동일한 효과를 가진다.

하지만 margin을 주고자 하는 컴포넌트가 textView나 editText와 같은 문자와 관련된 컴포넌트라면 이야기가 달라진다.

 

언어별 특성 차이로 인해 발생하는 불편을 최소화하기 위해 Left대신 Start, Right 대신 End를 사용해야 한다.

 

언어별 특징

대부분의 문자는 왼쪽에서 오른쪽으로 쓰고, 읽는다. 이를 LTR언어 라고 칭한다.

하지만 일부 언어(아랍어, 히브리어, 페르시아어, 우르두어 등)는 오른쪽 -> 왼쪽으로 쓰고, 읽는다. . 이를 RTL언어 라고 칭한다.

(좌) LTR언어 (우)RTL언어

그림을 보면 이해가 갈 것이다.

영어와 같은 LTR언어에서는 marginLeft 와 marginStart가 같은 효과를 보인다. 둘 다 들여쓰기 효과를 낼 수 있다.

하지만 RTL언어에서는 marginLeft 를 주면 말 그대로 왼쪽에서 margin을 주기 때문에 소용이 없어진다. 대신 marginStart를 주면 텍스트가 시작하는 오른쪽에서 margin이 들어가게 된다.

즉, LTR언어에서 Start는 Left이고, RTL언어에서 Start는 Right가 된다.

 

사용법

안드로이드에서는 4.2(API 수준 17)부터 RTL 텍스트 미러링을 지원하기 시작했다. 

안드로이드 4.2는 2012년에 등장한 것으로 현재 안드로이드 기기에서 대부분 지원한다고 생각하면 될 것 같다. build.gradle 파일을 확인해보면 targetSdkVersion이 17 이상으로 되어있는지 확인해보아야 한다.

또한 매니페스트에 Rtl를 사용하겠다고 설정되어야 한다.

<manifest ... >
    ...
    <application ...
        android:supportsRtl="true">
    </application>
</manifest>

매니페스트 파일

안드로이드 스튜디오에서 프로젝트를 생성하면 자동으로 해당 옵션이 들어갈 것이므로 따로 설정해 줄 필요는 없다.

어떤 컴포넌트가 RTL로 표시되었을 때 어떻게 나타나는지 확인하고 싶다면 해당 컴포넌트에 다음 속성을 주면 된다.

android:layoutDirection="rtl"

 

추가로

margin 뿐만 아니라 RTL언어를 대응하는 속성이 여럿 존재한다.

반응형
Comments