setTextSize단위 sp dp 변환하기

Posted by ITPangPang
2016. 10. 18. 23:13 안드로이드(android)/알아두면 좋은것


setTextSize

sp dp 변환하기



ㆍ 이번글에서는 코드로 TextView에 있는 Text의

    Size를 변경할때 dp단위로 넣는 방법에 대해

    알아보겠습니다.




글자단위가

sp, dp 외에도

px, pt 등등 많지만


두가지만 그냥

사용해보면서 차이점을

보도록 하겠습니다.


일단 setTextSize까지 작성


흔하게 사용하는

setTextSize 입니다


사진을 보니

TextSize는 두가지

형태로 지정해 줄 수가

있는것 같습니다.


먼저 첫번째

setTextSize(float size)

써보겠습니다


float size는 어떤 단위일까?


xml에서 글자크기를

써줄때는 sp, dp까지 붙여서

써 줄 수 있지만


코드로 정해줄때는

바로 써주는 것은 불가능

합니다.


그렇다면

위에 사진에서

setTextSize() 괄호안에

들어간 숫자들의

단위는 무엇일까요?


3초 검색이면

바로 알 수 있지만

직접 테스트를 해보면


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.tistory.itpangpang.textsize.MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="30sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="30dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="30px"/>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>


3가지

"Hello World"가 찍힌

 TextView를 추가해서


글자크기로

각각 30sp, 30dp, 30px

넣어줬습니다.


그리고 4번째 TextView는

코드로 글자크기 30

넣어보겠습니다.


public class MainActivity extends AppCompatActivity
{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
tv.setTextSize(30);
}
}


돌려보면 4가지

Text의 크기가 비교되겠죠?


4번째랑 똑같은

글자크기를

찾아야 되는데


3번째는 탈락이군요

3번째는 px입니다


첫번째는 sp이고

두번째는 dp입니다.


과연 4번째 TextView와

같은 단위는 무엇일지

찾아보기 위해서


디바이스의 설정에 들어가서

[디스플레이]-[글자크기]를

조절해봅니다.



가장 크게!

가장 작게!


그리고 결과를

확인해보면


확인해 보니

디바이스 설정에서

글자크기를 변경해줘도

1, 4번째는 항상 똑같은 걸

알 수 있습니다.


이것으로

setTextSize의 단위는

sp이다!

라는 걸 알아봤습니다


그럼 dp로 넣고 싶다면?


오늘의 가장 중요한 내용이죠


sp -> dp로

변환하는 방법입니다.


물론 Text의 단위는

sp로 사용하는것을

권장합니다


말 그대로 권장이지

필수는 아닙니다.


상황에 맞게

사용해야 합니다.


기사라던가, 채팅,

지문, 문제, 뉴스, 책등등


TextView에 Text가 촘촘히

들어가는 상황에서는

dp보다는 sp라는 단위를

넣음으로써


어르신분들이나

눈이 조금 불편한 분들이

잘 볼 수 있도록 하는 것이

효율적입니다.


하지만

TextView를

버튼으로 사용한다던가


디자인상으로 TextView를

사용할때 sp보다는 dp를

사용해야 되는 경우가 있습니다


예를 들어



TextView를

이런 버튼형태로

사용중인데

dp가 아닌 sp로

설정했을때


만약,

사용자가 글자크기를

최대로 키워버리면


이런식으로

원치 않은 결과가

나타날 수 있습니다.



그럼 이제 진짜로

sp -> dp

변환시켜 보면

딱 한줄만 써주면 됩니다.


setTextSize(TypedValue.COMPLEX_UNIT_DIP, 숫자);


간단하죠?

그럼 잘 나오나

테스트를 해보면

되겠죠


public class MainActivity extends AppCompatActivity
{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);
}
}


이렇게 넣어준 후에

앱을 실행시켜서 결과를 보고


디바이스 설정에서

글자크기를 변경시켜본후

다시 앱을 들어가서 확인하면 됩니다



어떤 설정을 해줘도

항상 글자크기가 일정한 것을

확인 할 수 있습니다


tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);


끝!!