2013-10-18 1 views
0

동적 텍스트가 있습니다. 문제는 모두 한 줄에 들어 맞아야한다는 것입니다. 안드로이드 장치가 전체 텍스트를 표시하기 위해 줄 바꾸기가있는 텍스트를 만들면 찾을 수있는 방법이 있습니까?텍스트가 너무 길어서 새 줄이 필요하지 않은지 알아보십시오

기본적으로 장치가 한 줄에 모두를 표시 할 수없는 경우 텍스트를 줄이는 것입니다. 이것이 가능한가?

현재 너무 길어질 때마다 데이터를 표시하고 새 라인을 만들고 있습니다. 나는 15 자 이후에 문자열을 나눌 수 있다고 생각했지만 화면 너비에 의존하게하고 싶다.

화면 너비를 얻을 수 있다고 생각하나요? 이것에 어떤 제안?

답변

1

이게 무슨 뜻이야?

TextView.setLines(1); 

XML 파일에서 줄 수를 설정할 수도 있습니다. 이 방법은 항상 한 행을 가지며 너무 길면 끝에 3 개의 점을 설정합니다.

편집 : 당신은 다음, 글꼴의 메트릭을 얻을 주어진 길이를 계산하는 데 사용할 필요가

TextView.setLines(1); // Sets the number of lines for your textview 
int start = textView.getLayout().getLineStart(1); // Gets the index for the start position of your text. 
int end = textView.getLayout().getLineEnd(1); // Gets the index for the end position of the first line. 
String date = "| 18 Oktober 2013 |"; // I don't know how you get the date so this is an example 

//Set the text with only the first line and date, so you only have one line with the date. 
textView.setText(textView.getText().substring(start, end - date.length()) + date); 
+0

안녕하세요. 이것은 내가 원하는 정확하게 똑같습니다. 내 textView 두 문자열의 조합입니다. 문제는 첫 번째 부분을 잘라야하고 두 번째 부분을 잘라내어야한다는 것입니다. 그래서 현재 그것과 같습니다 WAYTOOLONGSTRING | 17 Octobe ... 하지만 그렇게하고 싶습니다. WAYTOLONGST | 17 October 2013 행을 사용하여이 작업을 수행 할 수 있지만 너무 멀리있을 수 있습니다. 또한 setLines는 끝 부분에 3 개의 점을 추가하지 않고 그냥 잘라냅니다. 이것에 대한 제안? 또는 테이블 행과 함께 추가하고 패딩을 추가해야합니다. 어쨌든 당신의 대답을 upvote! – Musterknabe

+0

아직이 답변을 찾고 계시는지 모르겠지만 답변을 변경했습니다. 나는 이것이 당신이 찾고 있었던 것이라고 생각합니다. –

+0

안녕하세요. 해답을 주셔서 감사합니다. 그러나 어쨌든 날짜와 소스를 분리하여 처리 했으므로 더 이상 한 문자열에 결합하지 않았습니다! 하지만 고마워! – Musterknabe

0

당신이 표시하고자하는 문자열의 너비 (픽셀)를 알고 끈. 예를 들어, 당신은 할 수 있습니다

FontMetrics metrics = this.getFontMetrics(theFont); 
int width = metrics.stringWidth("sample string"); 

을 지금, 나는이 후, 다음에 할 수 있습니다 "..."당신이 뭘 원하는지 잘 모르겠지만, 당신이 문자열이 다음 추가 잘라야 할 가정

FontMetrics metrics = this.getFontMetrics(theFont); 
int maxWidth = /* Get the field's width */; 
String myString = "sample string"; 

if (metrics.stringWidth(myString) > maxWidth) { 
    do { 
     myString = myString.substring(0, myString.length - 1); 
    } while (metrics.stringWidth(myString + "…") > maxWidth) 
    myString = myString + "…"; 
} 

짧은 문자열을 조작 할 때이 방법이 잘 작동해야합니다. 긴 텍스트의 경우, AttributedString과 LineBreakMesurer의 사용을 의미하는 더 빠른 접근법이 있습니다. Oracle's Text API Trail을보십시오.

관련 문제