2010-02-19 8 views
12

특정 크기의 TextView이 있다고 가정 해보십시오 (실제로는 ... fill_parent, 20dip 등). 수학을 많이하지 않고도 사용 가능한 공간에 맞게 크기가 줄어들거나 커지도록 텍스트를 말할 수 있습니까?TextView에서 textSize 크기 조절

+0

여기에 대한 답을 참조하십시오 아주 잘, 작품 : 여기에 당신이 전혀 TEXTSIZE를 지정할 필요가 없습니다 자신의 위치에 대한 개선은 [여기 링크 설명을 입력합니다] [1] [1] : http://stackoverflow.com/questions/5033012/auto-scale-textview-text-to-fit-within-bounds – AllDayAmazing

답변

18

"복잡한 수학이 많이 필요합니다"보다 약간 간단하지만 텍스트 너비가 텍스트 뷰의 너비와 너무 멀지 않은 경우 사용할 수있는 해킹 솔루션이 있습니다. 텍스트의 폭이 당신의 텍스트 뷰의 폭보다 크게 다를 수 있습니다 경우

// HACK to adjust text width 
    final int INITIAL_TEXTSIZE = 15; 
    final int TEXTVIEW_WIDTH = textviewBackground.getIntrinsicWidth(); // I use the background image to find the width, but you can use a fixed value or whatever other method you prefer. 
    final String text = ...; 
    textView.setText(text); 

    int size = INITIAL_TEXTSIZE; 
    while(textview.getPaint().measureText(text) > TEXTVIEW_WIDTH) 
     textview.setTextSize(--size); 

, 올바른 글꼴 크기를 찾기 위해 선형 검색 대신 이진 검색을 사용하는 것이 좋습니다 수 있습니다.

이상적인 해결책은 아니지만 텍스트 크기를 조정하지 않아도되는 경우에 편리합니다. 텍스트 크기를 자주 조정해야하는 경우 복잡한 수학을하는 것이 좋습니다.

+0

+1 아주 좋은 대답입니다. 수락 한 IMO 여야합니다. –

0

U는 TextView의 아이디어 글꼴 크기 값을 계산할 수 있습니다. 그것은 너무 크지 않고 채울 글꼴 크기입니다. 공식은 다음

fontSize = (TextView Height) * (width DPI/height DPI)/(Screen Width * Screen Height); 

폭과 높이 DPI는 활동에서의 onConfigurationChanged 메소드를 재정의하고, 그리고 newConfig.screenWidthDp newConfig.screenHeightDp을 사용하여 얻을 수있다. 픽셀

화면 사이즈는 I 막 (의 onConfigurationChanged에서) 필요에 따라이 값을 계산하고, 어떤 정적 헬퍼 클래스으로 밀어 다음 헬퍼 기능

// Get Screen Size 
static public Point getScreenSize(Activity aActivity) 
{ 
    Display display = aActivity.getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    return size; 
} 

을 사용하여 얻을 수있다. 그런 다음 TextView에서 사용할 글꼴 크기를 결정해야 할 때이 클래스에서 가져옵니다.

이 방법이 효과가 있지만 가장 간단한 해결책은 아닙니다.

+0

쓸데없는. 문자의 길이를 고려하지 않습니다. – AndroidDev

2

나는 거의 모든 것을 시도해 보았고, 맨 위를 포함하여 대부분 실패했다. 가장 간단하고 효과적이었던 것은 emmby에서 발견되었지만 초기 textsize를 설정해야한다는 것을 알았습니다.

final String text = "HELP"; 

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

    DisplayMetrics metrics = getResources().getDisplayMetrics(); 
    int width = metrics.widthPixels; 
    int height = metrics.heightPixels; 

    tvFlash.setText(text); 
    tvFlash.setTextSize(TypedValue.COMPLEX_UNIT_PX, 1); 

    int size = 1; 

    do 
    { 
    float textWidth = tvFlash.getPaint().measureText(text); 

    if (textWidth < width) 
     tvFlash.setTextSize(++size); 
    else 
    { 
     tvFlash.setTextSize(--size); 
     break; 
    } 
    }while(true);