setTextSize단위 sp dp 변환하기
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);
끝!!
'안드로이드(android) > 알아두면 좋은것' 카테고리의 다른 글
int(Integer)형 Resource 등록 (0) | 2016.11.26 |
---|---|
Soft Navigation Bar(LG폰) 처리하기 (0) | 2016.11.15 |
안드로이드 스튜디오 2.2 한글깨짐 (0) | 2016.10.09 |
TextView(Button) TextColor Selector 코드로 변경하기 (0) | 2016.10.07 |
앱 종료시 AsyncTask 종료시키기 (0) | 2016.08.15 |