마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

textView에 들어갈 수 있는 문자열의 총 개수 구하기

0 추천
안녕하세요. 안드로이드 입문한지 얼마 안된 새내기입니다.

다름이 아니라

textView에 들어 갈 수 있는 문자열의 총 개수를 구하려고 하는데요

View에 사이즈가 가로200px(dp) * 세로 150px(dp)일 때

폰트사이즈 10dp(sp)로 몇 글자가 들어 갈 수있는지에 대한 질문입니다.

쉽게 생각해서 (가로/폰트사이즈)*(세로/폰트사이즈) 로 될 줄 알았는데

공식이 다른건가요? 아니면 따로 호출해야 할 메소드가 있나요?

작업은 onWindowFocusChanged에서 하고 있습니다.

가입 후 첫 질문드리는 거라 내용이 부족한 부분이 있는 것 같은데..

레이아웃을 공부중에 있어서 꼭 필요합니다 부탁드립니다..

 

package com.example.sizetest1;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.SeekBar;
import android.widget.TextView;

public class MainActivity extends Activity {

 TextView tv1;
 TextView tv2;
 TextView tv3;
 TextView tv4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv1 = (TextView)findViewById(R.id.textview1);
        tv2 = (TextView)findViewById(R.id.textview2);
        tv3 = (TextView)findViewById(R.id.textview3);
        tv4 = (TextView)findViewById(R.id.textview4);
       
        float fWidth, fHeight;
        fWidth = getWindowManager().getDefaultDisplay().getWidth();
        fHeight = getWindowManager().getDefaultDisplay().getHeight();
       
        tv1.setText("HDPI에서 fullWidth = "+String.format("%.1f", fWidth) +"px , "
        + "fullHeight = "+String.format("%.1f", fHeight)+"px"+ String.format("%n")+
          "DIP는 width = "+String.format("%.1f", fWidth/1.5)+"dp , "
            + "height = "+String.format("%.1f", fHeight/1.5)+"dp입니다");
       
       
 }
   
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
         float width1 = tv1.getWidth();
         float height1 = tv1.getHeight();
         float fsize = tv1.getTextSize();
         float line1;
         tv2.setText("Width = "+String.format("%.1f", width1)+"px , "
           + "Height = "+String.format("%.1f", height1)+"px"+String.format("%n")+
           "DIP는 width = "+String.format("%.1f", width1/1.5)+"dp , "
             + "height = "+String.format("%.1f", height1/1.5)+"dp입니다");
        
         tv3.setText("textSize = " + String.valueOf(String.format("%.1f", fsize))+"px, " +
         String.valueOf(String.format("%.1f", fsize/1.5))+"sp");

         tv4.setText("MainTextView에 들어갈 수 있는 line 당 글자 수는 : " +
         String.valueOf(String.format("%.1f", line1=(width1/fsize)*(height1/fsize)) +
           "전체 글자 수는 : " + (line1*tv1.getLineCount())));
        
        
    }
}

 

에서 tv4.setText부분을 하고 있습니다
실습위주 (430 포인트) 님이 2014년 7월 15일 질문
실습위주님이 2014년 7월 15일 수정

2개의 답변

+1 추천
 
채택된 답변
모든 Text는 서체정보가 반드시 필요하기 때문에 글자 사이즈를 계산 하려면 서체정보도 필요합니다.

Paint를 사용하시면 getTextBounds 등의 메서드들이 있으니 참고하셔서 사이즈 얻으시면 될듯합니다.

http://developer.android.com/reference/android/graphics/Paint.html
q1212 (26,020 포인트) 님이 2014년 7월 15일 답변
실습위주님이 2014년 7월 21일 채택됨
+1 추천
폰트에 따라 틀리고 글자에 따라 틀려집니다...

즉, 1 이라는 숫자를 가득채운것과 2라는 숫자를 가득채운것...당연히 1이라는 숫자를 가득채우는게 더 많은 글자가 들어가겠죠.한글일때도 틀리겠구요....

단순히 숫자와 영문만 들어간다고 치고 폰트를 모노스페이스로 고정한다고 했을때는 계산이 가능합니다. 넓이가 모두 동일하니까요.
바램 (19,650 포인트) 님이 2014년 7월 15일 답변
답변감사합니다. 제가 단순하게만 생각해서 공식에만 신경썼내요^^;
혹시 그렇다면
숫자, 영어, 한글에 대한 각각의 값을 가져올 방법도 있나요?
...