2016-08-05 2 views
2

여러 줄 문자열의 각 줄 끝에 범위를 추가하고 싶습니다. 나는 숯을 그려 보려고했으나 줄의 끝 부분에는 아무 것도 나타나지 않았다. 그러나 ImageSpan이 설정되면 선 높이는 증가 할 수 있지만 선상에는 여전히 이미지가 없습니다.여러 줄 텍스트의 줄 끝에 ImageSpan을 추가하는 방법

private void addSpansAtEnd() { 
    String s = "First line\nSecond line\Third line\n"; 
    SpannableStringBuilder e = new SpannableStringBuilder(s); 
    int stop = start + count; 
    for (int start = -1; 
     (start = s.indexOf("\n", start)) > -1 && start < stop; 
     ++start) { 
      e.setSpan(
        /*new ImageSpan(getContext(), R.drawable.ic_line),*/ 
        new NewLineSpan(), 
        start, 
        start + 1, 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 
} 

/* Trying to replace \\n with other character. */ 
private class NewLineSpan extends ReplacementSpan { 
    @Override 
    public int getSize(
      Paint paint, 
      CharSequence text, 
      int start, 
      int end, 
      Paint.FontMetricsInt fm) { 
     return 0; 
    } 

    @Override 
    public void draw(
      Canvas canvas, 
      CharSequence text, 
      int start, 
      int end, 
      float x, 
      int top, 
      int y, 
      int bottom, 
      Paint paint) { 
     paint.setColor(0xFF666666); 
     canvas.drawText("o", x, y, paint); 
    } 
} 

줄 끝에서 어떻게 그립니까?

+0

내가 추측하고있어이 같은 이미지를 원하는 : 난 당신이 공간을 추가하면 줄 바꿈이 그 공간 주위의 범위를 넣어 전에 좀 더 운이 있다고 생각 나는 대신 이미지를 사용했다.) 그래서 질문은 당신의 "하드"CR/LF, 즉 당신의 예제에서 "\ n"을 어디에 두어야하는지 (즉, ↲ 대신에 ¶), 또는 "Soft"CR/LF, 즉'TextView'가 멀티 라인 텍스트를 감싸기로 결정한 곳? 왜냐하면 부드러운 CR/LF를 다루는 것은 추가적인 도전의 레이어를 추가하기 때문입니다. –

+0

↲은 \ u21B5, ¶은 \ u00B6입니다. 불행히도 \ u21B5는 Roboto 글꼴이 아니므로 이미지가 필요한 것 같습니다. –

+0

나는 단지 선을 그어나 보이게하고 원래의 줄을 끊지 않고 싶다. 이미지 또는 char이지만 범위 만 있습니다. – Pavel

답변

1

개행에 스팬을 넣는 것은 다소 이상하게 보입니다. 개행은 두 줄을 가로 지르지 만 너비는 없습니다. ↲ (BTW 당신이 좋아하는 캐릭터를 사용할 수있는 :

for (int start = -1; 
    (start = s.indexOf("\n", start)) > -1 && start < stop; 
    start += 2) { // increment by 2 to skip the displaced newline 
     e.insert(start, " "); // insert a space for the span 
     e.setSpan(new ImageSpan(getContext(), R.drawable.ic_line), 
       start, 
       start + 1, 
       Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     stop++; // because a space was added 
} 
+0

SpannableString 편집을 피하려고합니다. – Pavel

관련 문제