2013-04-15 3 views
0

내 특별한 이유 때문에 String (텍스트보기에 배치) 크기 (픽셀 단위)가 장치의 너비 크기 (픽셀 단위)를 초과하지 않는지 확인해야합니다. 내가 사용하는 화면의 폭으로 활용하려면 다음문자열의 크기와 화면의 너비를 비교하는 방법은 무엇입니까?

final float scale = context.getResources().getDisplayMetrics().density; 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    try{ 
     Point size = new Point(); 
     display.getSize(size); 
     screenWidth = size.x; 
    }catch(NoSuchMethodError e){ 
     screenWidth = display.getWidth(); 
    } 
    screenWidth = screenWidth - ((int) (10 * scale + 0.5f)); //takes into account a 10dp margin 

을 그리고 내가 사용하는 문자열의 길이를 얻을 :

paint.measureText(string); 
문자열이 String 개체입니다

페인트가 Paint 개체입니다. 제가 직면하고있는 문제는 메서드는 화면 길이가 훨씬 더 길어도 String이 작다고 말합니다. 나는 뭔가를 간과 했는가? 이 작업을 수행하는 더 좋은 방법이 있습니까? 어떤 도움, 제안 또는 충고든지 크게 평가 될 것입니다! 감사!

+0

문자의 너비를 계산하려면 문자의 크기를 알아야합니다. 그리고 그것은 모노가 아닌 글꼴에 따라 다릅니다. –

+0

그래서 공식은 간단히 (문자의 크기) * (문자열의 크기)가됩니까? (문자의 크기)는 아마도 가장 큰 문자 크기 (M)와 같아야하고 (문자열의 크기)는'paint.measureText' 메쏘드와 같을까요? 그리고 내 다른 질문은'paint.measureText()'가 문자 크기를 참조하지 않고 크기를 계산하는 방법 일 것입니다. – chRyNaN

+0

아니요, _each_ 문자를 열거하고 크기를 계산해야합니다. 그런 다음 모두 함께 추가하십시오. –

답변

0

내 문제에 대한 대답은 내가 제공 한 코드로 쉽게 알아낼 수 없습니다. 내가 제공 한 코드가 정확했다.

Paint paint = new Paint(); 

을 그리고 나는 measureText(string) 방법을 참조 : 문제는 다음과 같이 내가 Paint 객체를 생성했다. 이 문제는 내가 TextView이라는이 하위 클래스에 준 텍스트 크기를 고려하지 않는다는 것입니다. 나는 일반적으로 사용했습니다

Paint paint = this.getPaint(); 
0

: 그래서,이 문제를 해결하기 위해 내가해야 할 일을했을 모두에 위의 코드를 변경하는 것이었다 상황이 유형에 대한

paint.getTextBounds 

하고 매우 발견 정확한.

TextView의 사용자 지정 버전에서 onSizeChanged을 덮어 쓰는 것 (다른 모든 것은 동일하게 유지됨)을 사용하면 필요할 때보기의 크기에 대한 직접적인 수정을 얻을 수 있습니다.

관련 문제