텍스트뷰(TextView)

참고 프로젝트: TextViewDemoA1

텍스트뷰는 화면에 고정된 텍스트 문자열을 표시하는 뷰이다. 이 뷰의 문자열은 사용자가 수정할 수 없다.

  • 문자열을 사용자가 수정할 수 없음
    텍스트뷰는 사용자 인터페이스를 구성하는 가장 기본적인 뷰이다. 그래서 에디트텍스트나 버튼들이 텍스트뷰를 상속해서 만들어졌다. 다음은 텍스트뷰의 상속 계층도이다.

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

다음 그림은 텍스트뷰를 하나 추가하고 실행한 화면이다.


그림 3-3

일반적으로 ViewGroup 클래스를 상속하지 않는 클래스들은 레이아웃 안에 포함해서 사용한다. 이 예제에서는 리니어 레이아웃 안에 텍스트뷰를 추가했다.

코드 TextVieW

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:text="안드로이드 사이드 http://www.androidside.com" 
        android:lines="2"
        android:textSize="12sp"
        android:autoLink="web|email"
        /> 
</LinearLayout>

android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:layout_width와 android:layout_height 속성에 지정된 "wrap_content"는 현재 뷰의 내용을 표현할 수 있는 크기로 뷰의 크기를 자동 조절하라는 의미이며, 현재 뷰를 포함하고 있는 부모 뷰의 크기만큼 가득 채우고 싶다면 "match_parent"를 지정해야 한다.

  • wrap_content: 포함된 내용을 보여줄 수 있는 크기로 설정
  • match_parent: 부모 뷰의 내부 여백(padding)을 제외한 크기로 설정
  • fill_parent: match_parent와 동일

TIP & TECH fill_parent와 match_parent의 차이점
layout_width나 layout_height에 지정할 수 있는 속성이 안드로이드 2.1까지는 wrap_content와 fill_parent만 존재했지만, 안드로이드 2.2부터는 match_parent가 추가되었다. 이 속성이 추가된 이유는 기존에 존재하던 fill_parent가 실제로 부모 뷰를 가득 채우는 것이 아닌 부모 뷰의 내부 여백(padding)을 제외한 만큼만 가득 채우기 때문이다. 그래서 fill_parent 대신에 사용할 수 있는 좀 더 직관적인 match_parent를 추가한 것이다. 두 속성이 같으므로 어느 것을 사용해도 무방하다고 생각할 수 있지만 fill_parent는 비권장 속성이므로 match_parent를 사용하는 것이 맞다.

android:text="안드로이드 사이드 http://www.androidside.com"
android:text는 텍스트뷰에 보여질 문자열을 말하며, "@string/android"처럼 문자열 리소스에 있는 문자열을 지칭할 수도 있다. 만약 "@string/android"처럼 문자열을 지정했다면, 이 문자열은 res/values/strings.xml에 다음 코드와 같은 형태로 작성되어 있어야 한다.

코드 문자열 XML - /res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="android">안드로이드 사이드 http://www.androidside.com</string>
</resources>

이렇게 작성한 문자열은 안드로이드 시스템이 R.java 클래스에 다음 코드처럼 추가해준다. 즉, "안드로이드 사이드 http://www.androidside.com" 이라는 문자열을 가진 android는 자바 코드에서 R.string.android로 참조할 수 있으며, 레이아웃 파일인 XML에서는 이 참조 방식을 좀 더 단순화한 @string/android로 참조할 수 있다.

코드 R.java

public final class R {
    public static final class string {
        public static final int android=0x7f080000;
    }
}

android:lines="2" 높이를 두 줄로 설정한다.

android:textSize="12sp" 텍스트 크기를 12sp로 지정한다. px로 지정할 수도 있지만, px로 지정하면 고해상도나 저해상도 폰에서 텍스트 크기가 다르게 보일 수 있으므로 적당하지 않다. 하지만 sp로 지정하면 해상도에 맞게 적절히 텍스트를 보여주므로 좀 더 일관된 텍스트 크기를 유지할 수 있다.

TIP & TECH 안드로이드 치수

단위 설명
px 픽셀(pixel)을 의미하며, 화면의 밀도와는 상관없는 치수이다.
dip dp dip는 Density-independent pixel의 약자이며, 여러 밀도의 화면에서 일정한 크기를 보여줄 수 있도록 제공되는 치수이다. dip를 줄여서 dp라고도 쓴다. pixel과 dip의 관계는 pixels = dips*(density/160)로 정의된다. 그래서 160dpi 화면에서는 1dip는 1pixel이고, 240dpi 화면에서는 1dip가 1.5pixel이 된다.
sp sp는 Scale-independent pixel의 약자이며, dp와 유사한 기능을 한다. 추가적으로, 사용자 설정에 따라 변경되는 텍스트 크기를 반영해준다.
pts 포인트(points)의 약자이며, 1포인트는 1/72인치이다.
in 인치(inches)의 약자이다.
mm 밀리미터(millimeters)의 약자이다.

패딩과 마진 그리고 너비와 높이는 뷰를 표현할 때 반드시 알아야 하는 속성이다. 이에 대해서 궁금하다면 다음의 TIP & TECH을 참고하기 바란다.

TIP & TECH 패딩(padding)과 마진(margin) 그리고 너비(width)와 높이(height)
TextView를 포함한 대부분의 뷰에는 패딩과 마진을 설정할 수 있다. 먼저 패딩은 android:padding으로 선언할 수 있으며, 마진은 android:layout_margin으로 설정할 수 있다. 이 둘의 차이는 다음과 같다. 패딩은 뷰 내부의 내용(Content)와의 여백을 말하며 마진은 뷰 외부와의 여백을 말한다. 그래서 마진을 설정하게 되면 다른 뷰와의 간격을 유지할 수 있다. 패딩은 android:paddingLeft, android:paddingTop, android:paddingRight, android:Bottom으로 원하는 영역만 설정할 수 있다. 마찬가지로, 마진도 android:layout_marginLeft, android:layout_marginTop, android:layout_marginRight, android:layout_marginBottom을 사용해서 원하는 영역만 설정할 수 있다.
그림 3-4

android:layout_width는 뷰의 너비를 지정하는 속성이며, android:layout_height는 뷰의 높이를 지정하는 속성이다.


텍스트뷰와 관련된 속성을 살펴보고 싶다면 다음 링크를 참고하기 바란다.
URL http://www.androidside.com/docs/reference/android/widget/TextView.html

results matching ""

    No results matching ""