TextView-프로그래밍 방식으로 텍스트 크기를 설정해도 작동하지 않는 것 같습니다


140

Eclipse Indigo를 사용하고 2 개의 에뮬레이터 (2.2 및 3.0)에서 테스트 중입니다.

아래 코드는 현재 테스트중인 것을 보여 주지만 에뮬레이터를 실행하려고 할 때 텍스트 크기를 설정하면 화면에 아무것도 표시되지 않습니다 (텍스트 크기를 주석 처리하면 텍스트가 빨간색으로 표시됩니다). 나는 어떻게 든 일식이 코드를 다시 작성하지 않는다고 생각했지만 파란색 배경을 추가하기 위해 코드 줄을 추가했으며 효과가있었습니다. 여전히 성공하지 못한 텍스트를 설정 한 후 텍스트 크기 설정을 시도했습니다. 코드는 아래와 같습니다. 당신의 도움을 주셔서 감사합니다! (면책 조항)-XML을 멀리하려고합니다. 내가 이미 자바를 알고 있기 때문에 나는 그것에 의존하고 싶지 않습니다.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}

답변:


19

텍스트 크기 2는 실제로 보이지 않습니다. 적어도 14로 시도하십시오. BTW, xml을 사용하면 많은 장점이 있으며 'Hello World'보다 더 복잡한 것을 해야하는 경우 인생을 더 쉽게 만들 수 있습니다.


14로 시도하겠습니다. 첫 번째 게시물에서 말했듯이 2가 너무 작더라도 화면을 비워 두지 않아야합니까? 나는 단순히 크기를 설정하는 대신 텍스트가 이미 있던 것 이상으로 스케일로 읽고 있다고 생각합니다. -나는 볼 것이지만 어쨌든 물어볼 것입니다-기본 크기는 무엇입니까? 어쨌든 감사합니다.
cspam

btw-그렇습니다 .xml의 장점을 알 수 있지만 경험이 전혀 없습니다. 그래, 아마 배우기 쉬울 것입니다. 이미 Java에 익숙하므로 가능한 한 많은 클래스에 익숙해지는 것이 실제로 유용하다고 생각했습니다. XML을 사용하면 많은 것을 숨길 수 있습니다.
cspam

숨기지 않습니다-동일한 매개 변수를 가진 동일한 클래스입니다. 둘 사이를 번역하는 데 시간이 걸리지 만 실제로는 매우 효율적입니다. 또한 XML로 뷰를 정의하면 시스템은 레이아웃 파일만으로 코드를 변경할 필요없이 다양한 화면 크기, 밀도 및 방향을 처리합니다.
Nikolay Elenkov

여러 가지 요소를 기반으로 런타임에 레이아웃과 방향을 변경할 수 있습니까?
cspam

그것은 매우 광범위한 질문이지만 간단히 말해서 그렇습니다. UI를 XML로 정의하더라도 런타임에 여전히 뷰를 추가 / 제거 할 수 있습니다. 기본 동작을 무시하고 방향 변경을 직접 처리 할 수도 있습니다.
Nikolay Elenkov 1

535

이 방법 TextView.setTextSize(int unit , float size);에는 두 가지 매개 변수가 사용됩니다.

이 시도 :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

이것이것을 참조하십시오 .

업데이트 : 이제 setTextSize(float size)텍스트 크기 를 " "단위로 자동 설정합니다 scaled pixel. COMPLEX_UNIT_SP를 수동으로 언급 할 필요가 없습니다. 설명서를 참조하십시오 .


36
이것이 정답입니다. 더 구체적으로 : float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin

2
대단히 감사합니다!
DmitryKanunnikoff

72

이것은 나를 위해 문제를 해결했습니다. 모든 장치에서 글꼴 크기가 균일합니다.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));

R.dimen.font가 균일하거나 다른 장치의 크기가 다른가요?
The_Martian

필자의 경우 dimen.xml 파일에서 글꼴을 값, values-sw600dp, values-sw720dp와 같은 폴더에 선언했습니다.
Vikas

textView.setTextSize (R.dimen.text_size_max) 호출 후 TextView가 사라진 것은 이상하지만 메소드를 사용하면 작동합니다.
li2

나를 위해 작동합니다. 감사합니다!
apurv thakkar

24

현재 setTextSize(float size)방법이 잘 작동 하므로 텍스트 크기를 변경 하기 위해 다른 방법을 사용할 필요가 없습니다.

android.widget.TextView.java 소스 코드

/**
 * Set the default text size to the given value, interpreted as "scaled
 * pixel" units.  This size is adjusted based on the current density and
 * user font size preference.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

사용 예

textView.setTextSize(20); // set your text size = 20sp


12

코드에서 텍스트 크기 설정에 대한 자세한 내용 은 링크를 참조하십시오 . 기본적으로 그것은 말합니다 :

공공 무효 setTextSize (INT 단위, 부동 크기)

이후 : API 레벨 1 기본 텍스트 크기를 지정된 단위 및 값으로 설정하십시오. 가능한 차원 단위는 TypedValue 를 참조하십시오 . 관련 XML 속성

android : textSize 매개 변수

단위 원하는 치수 단위입니다.
size 주어진 단위로 원하는 크기.


1
방금 코드에서 Eclipse를 두 번 확인했으며 intellisense에 따르면 실제로 setTextSize, setTextSize (float size), setTextSize (int unit, float size)에 대한 두 가지 옵션이 있습니다. 연결 한 설명서에서이를 확인합니다.
cspam

맞아-해봤 어? 또한 Nikolay는 2가 작게 보일 것이라고 말하면서 증가를 시도하십시오.
Jack

예, 그러나 문제는 내가 지금 가지고있는 방식으로하려고하면 텍스트가 표시되지 않습니다. 그냥 빈 화면입니다. 2가 눈에 띄지 않더라도 왜 화면이 비어 있습니까?
cspam

비어 있지 않습니다. 정말 가까이 보면 작은 빨간 픽셀을 볼 수 있습니다 :). 점차적으로 크기를 늘리십시오.
Nikolay Elenkov

그리고 setTextSize (float)는 setTextSize (COMPLEX_UNIT_SP, float)와 같습니다.
Nikolay Elenkov

10

내 경우에는이 방법을 사용했습니다 .

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

프로그래밍 방식으로 TextView의 TextSize를 설정하십시오 .

textView.setTextSize(pxFromDp(18, YourActivity.this));

계속 즐기십시오 :)


안녕하세요 @ Dhruv Raval,이 값 18이 화면 밀도에 유효하거나 각 화면에 치수를 만들어야하는 경우 프로젝트에서 글꼴 크기를 조정할 수 있도록 선택하고 있습니까?
Armando Marques Sobrinho
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.