상세 컨텐츠

본문 제목

[Android]자바 스타일 문자

Android 개발

by mobile 2013. 4. 21. 03:20

본문

반응형

android.text 패키지에서 제공하는 클래스를 사용하여 XML 문서처럼 마크업 문자를 첨부 하기도 삭제하여 자신이 원하는 스타일 문자를 만들 수 있다. 이러한 스타일 문자를 만들 수 있다. 이러한 스타일 문자를 안드로이드에서는 span이라 표현하는데, 스팬은 새로 맞춘 문자서식, 문단서식, 이미지 정보등 문자열 표현하는 용어나 어떤 동작이나 행위로 인해 추가로 전달하는 정보를 말한다.


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <EditText android:id="@+id/edit"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:maxLength="40"

        android:text="@string/style_text_1" />

<TextView android:id="@+id/text"

   android:layout_width="match_parent"

   android:layout_height="wrap_content"

   android:bufferType="spannable" />

<TextView android:id="@+id/textlink"

   android:layout_width="match_parent"

   android:layout_height="wrap_content"

   android:text="@string/style_text_2"

   android:bufferType="spannable"

   android:linksClickable="true" />

</LinearLayout>


@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.spannable_ex_01);


EditText edit = (EditText) findViewById(R.id.edit);

Spannable mySpan = edit.getText();


mySpan.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, 12,

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

mySpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), 18, 37,

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

}


getText() 메서드로부터 반환되는 Editable 객체로 수정이 가능하고, 마크업할 수 있는 객체라는 것을 알수 있다.

BackgroudColorSpan 클래스와 ForgroundColorSpan 클래스는 문자의 색상을 변경하는 기능을 제공한다. EditText 객체는 속성상으로 editable으로 되어 있기 때문에 setSpan() 메서드를 사용하여 스타일 문자의 처리가 가능하다.


void android.text.Spannable.setSpan(Object what, int start, int end, int flags)

public abstract void setSpan (Object what, int start, int end, int flags)


StyleSpan 객체와 BackgourdColorSpan 객체와 같이 waht 이라는 객체를 사용하여 문자의 start위치로 부터 시작하여 end까지 수정한다.


what 객체는 android.text.style 패키지에서 제공하는 클래스의 객체를 말한다. 특정 객체를 지정할 수 없어 Object 타입의 what이란 객체이름으로 매개변수를 선언하였다.


StyleSpan 클래스는 문자를 굵게 만든다든가 이탤리체로 전환하다든가 또는 android.graphics.Typeface 클래스에서 제공한 (BOLD, ITALIC, NORMAL, BOLD_ITALIC)를 사용하여 문자를 스타일 문자로 만든다.


TextView text = (TextView) findViewById(R.id.text);

// SpannableString 생성자를 사용하여 문자열을 만든다.

SpannableString textSpan = new SpannableString(

"Lorem ipsum dolor sit amet");

// 폰트 사이즈 변경

textSpan.setSpan(new RelativeSizeSpan(0.5f), 0, 5,

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

// Lorem를 붉은 색으로 만든다.

textSpan.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);

// ipsum의 글자를 물리적인 크기인 30픽셀로 만든다.

textSpan.setSpan(new AbsoluteSizeSpan(30), 6, 11, 0);

// sit 문자를 삭제형태로 표기한다.

textSpan.setSpan(new StrikethroughSpan(), 18, 21, 0);

textSpan.setSpan(new RelativeSizeSpan(2f), 22, 26, 0);

textSpan.setSpan(new ForegroundColorSpan(Color.GREEN), 22, 26, 0);

text.setText(textSpan, BufferType.SPANNABLE);

TextView link = (TextView) findViewById(R.id.textlink);

Spannable linkSpan = (Spannable) link.getText();

URLSpan profile = new URLSpan(""){


@Override

public void onClick(View widget) {

// TODO Auto-generated method stub

//super.onClick(widget);

Toast.makeText(widget.getContext(), "URLSpan onClick Toast !!!", 0).show();

}

};

// 클릭시 profile 객체의 onClick() 메서드를 실행한다.

linkSpan.setSpan(profile, 0, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

link.setMovementMethod(LinkMovementMethod.getInstance());


SpannableSring 클래스 역시 Spannable 인터페이스를 구현하므로 setSpan()메서드를 사용하여 문자를 처리할 수 있다. setMovementMethod() 메서드는 텍스트 뷰의 방향키 또는 터치에 대한 핸들러를 제공한다. android.text.method.MovementMethod 인터페이스가 제공하는 핸들러는 단말기의 방향키를 이동시 문자를 스크롤하고 커서를 이동시키는 기능을 수행한다. 원래 방향키는 항상 화면의 뷰가 먼저 포커스가 이로어진 다음에 움직일 수 있으므로 setMovementMethod() 메서드는 항상 setFocusable() 메서드를 호출하여 특정위치에 포커스를 주게된다.


LinkMovementMethod 클래스는 뷰가 포커스되어 있을 때 엔터키를 누르거나 또는 뷰를 터치하였을 때 문자버퍼의 정보를 읽고 연결(또는 링크Link)시키는 기능을 수행한다.




반응형

'Android 개발' 카테고리의 다른 글

[Android] 인텐트  (0) 2013.07.31
[Android]시간 포맷 클래스  (0) 2013.07.13
[Android]XML 스타일 문자  (0) 2013.04.21
[Android]상태 리스트 모형  (0) 2013.04.20
[Android]Shape 요소  (0) 2013.04.20

관련글 더보기

댓글 영역