텍스트를 출력해보자! 안드로이드 TextView

안드로이드 TextView 란 무엇?

안드로이드에서 가장 기본적인 유저 인터페이스 요소 중 하나가 바로 이 TextView 입니다. TextView 는 말 그대로 글자를 화면에 그려주는 위젯입니다. 안드로이드의 View 를 상속했기 때문에 View의 속성인 width, height, padding, visibility 등의 속성을 그대로 사용할 수 있습니다.

상속관계

java.lang.Object
? android.view.View
? android.widget.TextView

안드로이드 TextView 특징

TextView는 간단하고 직관적인 위젯이라 사용하기에 큰 어려움은 없지만, 몇 가지 주의해야 할 사항이 있습니다.

첫 번째, 텍스트의 크기를 명시하는 단위는 “px”이 아니라 “sp” 를 사용해야 합니다. 이는 별도의 내용으로 다룰 예정입니다.

두 번째, TextView에 표시할 문자열은?XML상에서 하드코딩하지 마시고 가능하면 res/string.xml 의 내용을 참조하도록 해야 합니다. XML상에서 직접 하드코딩하면 지역화 할 때 큰 문제가 될 수 있습니다.

세 번째, TextView 의 높이를 wrap_content 로 설정할 경우 긴 문자열을 표시할 때 여러 줄에 걸쳐서 표시되며 TextView의 높이도 내용에 따라 늘어납니다. 따라서 setLines(int)(Java) 혹은 android:lines(XML) 에서 높이를 지정하거나 ?setMaxLines(int) 혹은 android:maxLines(XML) 에서 최대 줄 수를 지정하도록 해야합니다.

TextView 예제

XML + Java

XML 에서 TextView를 정의하고, Java 코드에서 이 TextView를 얻어와서 작업할 수 있습니다.

<TextView
  android:id="@+id/TextViewHello"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/hello" />
package net.wisedog.android.tutorial;</pre>
<pre>import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;

public class TextViewTutorial extends Activity {
? /** Called when the activity is first created. */
? @Override
? public void onCreate(Bundle savedInstanceState) {
? ? super.onCreate(savedInstanceState);
? ? setContentView(R.layout.main);

? ? TextView textview = (TextView)findViewById(R.id.TextViewHello);
? ? // Do something...
? }
}

android_textview_tutorial_0

Java

혹은 프로그래밍적으로 생성할 수 있습니다. LayoutParam 을 지정 후, 사용하면 됩니다.

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

// Fragment 상에서 생성할 경우 MyActivity.this 대신 getActivity()
TextView hello = new TextView(MyActivity.this);
// String Resource로 부터 생성할 경우에는 getString을 사용하고,
// 하드코딩 하고 싶으면 바로 원하는 문자열을 적는다. 예: "Hello"
msg.setText(getString(R.string.hello));
msg.setLayoutParams(params);
LinearLayout ll = (LinearLayout) findViewById(R.id.myLayout);
ll.addView(hello);

주요 속성

  • ?android:ellipsize : 지정된 줄에서 표현할 수 없을 만큼의 문자열을 표시해야 할 경우, 말 줄임표(…)를 설정하고 이 위치를 표시합니다. 이 속성은 android:lines 혹은 android:maxLines 가 설정되어 있을 때 동작합니다.
  • android:textColor : 문자열의 색상을 지정합니다. 이 글을 참조하세요!
  • android:text : 문자열을 지정합니다.
  • android:letterSpacing : 자간(글자 사이의 간격)을 조절합니다.
  • android:textStyle : 볼드(Bold), 이태릭(Italic), 혹은 이 두 가지 스타일을 모두 설정할 수 있습니다.
  • android:textSize : 글자 크기를 조절합니다. 단위는 sp.
  • android:textScaleX : 장평을 조절합니다.
  • android:gravity : 문자열이 TextView 에 어떻게 정렬될지 설정합니다.

TextView 팁

줄바꿈

문자열을 여러 줄에 걸쳐서 출력하고 싶다면 문자열 중간에 ‘\n’을 삽입하면 됩니다.

폰트 변경

자신만의 폰트를 사용하고 싶다면, 아래와 같이 코드를 적으면?됩니다.

TextView tv = (TextView) findViewById(R.id.textview);</pre>
Typeface face = Typeface.createFromAsset(getAssets(),?"fonts/malgungothic.ttf");
tv.setTypeface(face);

이 방법은 asset 에 폰트 파일을 넣고 직접 설정하는 방식으로, 모든 위젯마다 일일히 위 코드를 적어줘야 하기에 앱 전체에 적용하고 싶다면 보통 불편한 것이 아닙니다.. ?이때는 보통 커스텀 TextView을 만들고 생성자에 위 코드를 삽입한 후 그 위젯을 상속받아서 만드는 것이 일반적입니다.

다만 안드로이드 4.0(ICS) 부터는 Roboto 폰트를 내장하고 있기 때문에 단순히?android:fontFamily 속성만 “sans-serif”로 변경하면 Roboto 폰트 적용이 가능합니다.

아이콘 + 텍스트 설정을 한 번에

리 스트뷰에는 보통 왼쪽에 이미지가, 오른쪽엔 텍스트 한 줄 있는 요소를 많이 사용합니다. LinearLayout 혹은 RelativeLayout 에 ImageView와 TextView를 함께 넣어서 구성할 수 있는데요, 이를 TextView 하나만 사용하고도 구성할 수 있습니다.

<TextView
android:id="@+id/TextGoodByte"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/good_bye"
android:drawableLeft="@drawable/ic_launcher />

XML에 “drawableLeft” 속성을 이용하면 TextView 왼쪽에 그림을 삽입할 수 있습니다. 간단한 ListView 요소는 이렇게 해결할 수 있습니다.

문자열에 웹 주소가 있으면 자동으로 링크 생성하기

문자열에 웹 주소, 전화번호, 이메일 주소 등의 알려진 형태의 데이터가 있다면 이 데이터에 자동으로 링크를 걸어줄 수 있습니다.

예 를 들어 “Hi! Please visit http://www.shiftnegative.com or contact hello@shiftnegative.com” ?이라는 문자열이 있고 이 문자열의 URL 부분에는 웹 브라우저를 구동할 수 있는 링크를, 이메일 부분에는 이메일 클라이언트를 구동할 수 있는 링크를 넣고 싶다면, 아래와 같이 XML 을 구성하면 됩니다.

<TextView
android:id=”@+id/TextLinkTest”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”@string/link_test”
android:autoLink=”web|email” />

android_textview_tutorial_1

참고자료

  1. Android Developers

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *