안드로이드 텍스트뷰 속성 7. [ems, maxEms, minEms] (Android TextView Attributes 7)

2016. 9. 30. 14:56


1. TextView 속성 (7)

TextView 속성 리스트 및 요약 설명을 확인하시려면 [안드로이드 텍스트뷰 속성] 페이지를 참고하시기 바랍니다.


TextView 속성에 대한 자세한 설명 및 예제를 확인하시려면, 아래 표에서 속성 이름을 클릭하시기 바랍니다.


속성 속성 속성 속성 속성
autoLink autoText breakStrategy bufferType capitalize
cursorVisible digits drawableBottom drawableEnd drawableLeft
drawablePadding drawableRight drawableStart drawableTint drawableTintMode
drawableTop editable editorExtras elegantTextHeight ellipsize
ems fontFamily fontFeatureSettings freezesText gravity
height hint hyphenationFrequency imeActionId imeActionLabel
imeOptions includeFontPadding inputMethod inputType letterSpacing
lineSpacingExtra lineSpacingMultiplier lines linksClickable marqueeRepeatLimit
maxEms maxHeight maxLength maxLines maxWidth
minEms minHeight minLines minWidth numeric
password phoneNumber privateImeOptions scrollHorizontally selectAllOnFocus
shadowColor shadowDx shadowDy shadowRadius singleLine
text textAllCaps textAppearance textColor textColorHighlight
textColorHint textColorLink textIsSelectable textScaleX textSize
textStyle typeface width

2. TextView 속성 활용

2.1 EM 단위의 크기로 TextView의 고정 너비 설정하기. (ems, maxEms, minEms)

TextView의 너비를 EM 단위의 크기로 설정하기 위해 "ems" 속성을 사용합니다. EM("em")이라는 단위는 CSS(Cascading Style Sheets)를 다뤄본 사람이라면 한번 쯤은 접해본 경험이 있을 것입니다.

  * android:ems - TextView의 너비를 EM 단위 값으로 지정.
        > 정수 값 사용. (예. 5)
        > 현재 폰트에 따른 EM 단위 값으로 TextView의 너비가 고정됨.
        > layout_width가 반드시 "wrap_content" 이어야 함.
        > 다른 방법(width 속성 등)으로 TextView의 크기를 지정하면 ems 값은 무시됨.

EM은 활자인쇄(Typography) 분야에서 사용하는 단위인데, 현재 디지털 영역에서는 폰트의 pt(point) 크기를 나타내는 값입니다. 만약, 16pt 폰트를 사용하고 있다면, 1em은 16pt를 나타내는 것이죠.


EM은 원래 알파벳의 대문자 'M'의 너비를 나타내기 위한 단위였는데, 'M'문자가 전통적인 활자인쇄에 사용되는 사각 문자틀의 전체너비(full-width)에 맞춰 주조되기 때문이었습니다. 즉, 'M'문자가 알파벳에서 가장 큰 너비를 가진 문자인 것이죠. (공식적인 기록을 확인한건 아니지만, 개인적인 추측으로, EM은 "Element M"의 약자가 아닐까하는 생각이 드네요.)

ems 속성 'M' 문자의 1em


하지만 [wiki - em (typography)]에 따르면, (아래에 발췌한) 여러 가지 이유들로 인해, 현대의 활자체들에서 'M'문자는 1em보다 다소 작은 너비를 가진다고 합니다. 특히 디지털에서의 EM은 'M' 문자의 너비와 관계없이, 항상 폰트가 가진 point size(pt)를 의미한다고 합니다.

    "wiki - em (typography)" 에서 발췌한 내용. https://en.wikipedia.org/wiki/Em_(typography)

현대 활자의 EM 의미


자, 그럼 EM 단위의 크기로 TextView의 너비(width)를 설정하는 "ems" 속성은 언제 사용하는 걸까요? 바로, TextView에 적용되는 폰트 크기에 따라 TextView의 너비가 항상 동일한 비율의 너비를 가지도록 만들 때 사용될 수 있습니다.


즉, TextView의 폰트 크기가 바뀌어도, 동일한 텍스트에 대해, TextView 내에서 항상 같은 모양으로 표시되도록 만들고자 할 때 유용하게 사용할 수 있습니다. 폰트 크기에 따라 크기 비율을 조절한 것 처럼 말이죠.


아래의 예제를 통해 ems 속성이 어떻게 동작하는지 확인할 수 있습니다.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text1"
        android:background="#FF0000"
        android:ems="10"
        android:text="ABCDE12345가나다라마"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text2"
        android:layout_below="@id/text1"
        android:background="#00FF00"
        android:textSize="24sp"
        android:ems="10"
        android:text="ABCDE12345가나다라마"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text3"
        android:layout_below="@id/text2"
        android:background="#0000FF"
        android:textColor="#FFFFFF"
        android:textSize="36sp"
        android:ems="10"
        android:text="ABCDE12345가나다라마"/>

ems 속성 예제 화면


TextView에 최대, 최소 ems 크기를 설정하려면, 각각 "maxEms", "minEms" 속성을 사용합니다. maxEms는 TextView가 늘어날 수 있는 최대 ems 크기로 사용됩니다. minEms는 TextView의 최소(초기) ems 크기로 사용됩니다.

  * android:maxEms - TextView의 최대 ems 값 설정.
        > 정수 값 사용. (예. 10)
        > ems 속성을 같이 사용하면 maxEms 속성은 무시되고 ems에 지정한 값이 최대가 됨.
  * android:minEms - TextView의 최소 ems 값 설정.
        > 정수 값 사용. (예. 10)

아래는 EditText에 minEms와 maxEms 속성을 사용한 예제 소스입니다.

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#AAAAAA"
        android:textSize="40sp"
        android:minEms="3"
        android:maxEms="7"
        android:text="" />



3. 참고.


ANDROID 프로그래밍/TEXTVIEW