2015-01-16 2 views
1

아마도 적절한 키워드를 입력하지 않았지만 답변을 찾을 수 없습니다. 특정 문자열로 설정 한 경우 TextView의 크기를 알 수 싶습니다. 그러나, 모든 것이 활동에 배치되기 전에 나는 알고 싶다.TextView가 특정 문자열로 어떤 크기인지 알고있는 방법

내 TextView의 너비와 높이는 고정되어 있습니다. 나는 다음과 같은 높이를 얻을 수 있습니다 :

myTextView.setText(myString); 

// ... UI gets laid out ... 

myTextView.getHeight() 

높이가 특정 지점을 지나면 TextView의 너비를 변경하고 싶습니다. (하지만 그 전에는 아닙니다.) 그리고 UI가 배치 될 때까지 기다리는 것이 아니라 myString이 있으면 높이를 알고 싶습니다. 그리고 필요하다면 너비를 변경합니다.

나는 Layout 클래스를 보았지만 어떻게해야 할지를 알 수 없었다. TextView의 onMeasure를 재정의하는 것과 관련이 있을지 궁금하지만 실제로 시도하는 방법을 모르겠습니다. 어떤 도움을 주셔서 감사합니다. 모두 @의 user3249477에 자신의 답변을 0xDEADC0DE @

업데이트

감사합니다. 지금은 해결책으로 @ user3249477의 답변을 표시하고 있습니다. (보기의 크기를 여러 번 조정해야하기 때문에 반복적으로 가시성을 켜고 끌 수는 없지만) 필요한 키워드를 제공하기 위해 @ 0xDEADC0DE를 +1합니다. 추가로이 문제를 조사하십시오.

더 많은 연구와 테스트가 필요합니다.

OnLayoutChangeListener :

의 measureText() 및 getTextBounds() :

여기에 내가 도움이 지금까지 발견 한 몇 가지 링크가 있습니다

재정 onSizeChanged또한 흥미로운 같습니다 https://stackoverflow.com/a/14399163/3681880

+0

이제이 문제에 접근하기 위해'StaticLayout'을 사용합니다. [이 답변] (http://stackoverflow.com/a/41779935/3681880)을 참조하십시오. – Suragch

답변

1

세트 당신의 TextView 숨김 :

android:visibility="invisible" 

그리고 그것을 측정하십시오. 완료되면 가시적으로 설정하십시오 :

TextView myTextView = (TextView) findViewById(R.id.text); 
final int maxHeight = 500; 
myTextView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
    @Override 
    public void onLayoutChange(View v, int left, int top, int right, int bottom, 
           int oldLeft, int oldTop, int oldRight, int oldBottom) { 
     v.removeOnLayoutChangeListener(this); 

     LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) v.getLayoutParams(); 
     Log.e("TAG", "H: " + v.getHeight() + " W: " + v.getWidth()); 

     if (v.getWidth() > maxHeight) { 
      params.width += 100; 
      v.setLayoutParams(params); 
     } 
     v.setVisibility(View.VISIBLE); 
    } 
}); 
2

당신은 무시하지 않고 그것을 할 수 있습니다. TextViewPaintgetPaint()으로 설정하면 measureText(string)을 사용하면 Paint으로 그릴 때 TextView의 최소값을 얻을 수 있습니다.I는 다음과 같습니다

TextView textView = new TextView(this); 
float textWidth = textView.getPaint().measureText("Some Text"); 

업데이트
높이를 얻으려면, 당신은이 같은 Paint 객체에 getTextBounds()를 호출 할 수

String text = "Some Text"; 
    Rect textBounds = new Rect(); 
    textView.getPaint().getTextBounds(text, 0, text.length(), textBounds); 
    float height = textBounds.height(); 
    float width = textBounds.width(); 
+0

이것은 OP가 TextView의 높이를 요구하는 동안 텍스트 너비를 반환합니다. – Simas

+0

높이를 알아 내려고 답변을 업데이트했습니다. – 0xDEADC0DE

+0

업데이트의 문제점은 모든 텍스트를 한 줄로 묶어야한다는 것입니다. 높이는 폰트의 높이에 불과합니다. – Simas

관련 문제