2015-02-18 4 views
4

Первая буква каждого слова на новой строке обрезана для us denealian cursive font. enter image description hereТекст, отрезанный спереди для конкретного шрифта

увидеть картину это одно с padding.If я не используя каких-либо отступов, это будет как в ПОС 2 enter image description here

Это мой код

<com.font.anything.writinghelper 
    android:id="@+id/textView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textColor="#000000" 
    android:padding="20dip" 
    android:textSize="60sp" 
    android:text="japanese google donkey elephant ostrich" 
    /> 

Здесь писать помощник является класса, чтобы подчеркнуть текст

 protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    Rect r = mRect; 
    int padding =55; 
    Paint paint = mPaint; 
    int count = getLineCount(); 
    for (int i = 0; i < count; i++) { 
    int baseline = getLineBounds(i, r); 
    canvas.drawLine(r.left - padding, baseline, r.right + padding, 
      baseline, paint); 
    } 
    super.onDraw(canvas); 
} 

Может кто-нибудь помочь?

Редактировать

Запрошенный скриншот

enter image description here

Является Там способ поставить некоторое дополнительное пространство в направлении левой стороны TextView?

+0

Можете ли вы мне прислали параметры canvas.drawLine (r.left - обивка, исходно, r.right + обивка, базовой линии, краски); это .... – Pavya

+0

письменной линии помощник только для под лежащим текстом Я не думаю, что это имеет какое-то отношение к этому, потому что я пробовал без помощника, и результат был таким же. Любой способ это параметры mRect = новый Rect(); \t \t mPaint = new Paint(); \t \t mPaint.setStyle (Paint.Style.STROKE); \t \t mPaint.setStrokeWidth (2); \t \t mPaint.setColor (0xFF03B9FF); –

ответ

2

Наконец-то я сделал работу для этого. Это проблема с шрифтом, и я не уверен, что это может быть исправлено каким-либо другим способом. Так что я сделал это, сначала получите макет TextView и получите конец и начните каждой строки и, следовательно, получить строку в каждой строке. Теперь добавьте пространство перед каждой строкой. Вот весь код. Помогите кому-нибудь другому.

ArrayList<String> lines = new ArrayList<String>(); 
    ArrayList<String> newLines = new ArrayList<String>(); 
    String line=""; 
    String text = getText().toString(); 
    Layout layout = getLayout(); 
    int start=0; 
    int end; 

    for (int i=0; i<count; i++) { 
     end = layout.getLineEnd(i); 

     lines.add(text.substring(start,end)); 
     line = lines.get(i); 
     start = end; 
     String nwText = ""; 
     nwText = " "+ line+" "; 
     newLines.add(nwText); 
    } 
    Paint mPaint = getPaint(); 
    int i = 0; 
    // String[] textLines = Results.split("\\n+"); 
    //float textsize = getTextSize(); 

    for (String textLine : newLines) 
    { 
     // mPaint.setTextSize(textsize); 
     int baseline = getLineBounds(i, r); 
     canvas.drawText(textLine, 0, baseline, mPaint); 
     i++; 
    } 
0

Я получаю аналогичное решение. Это рекурсивно добавляет пробелы в начало и конец строки, и если при добавлении пространства слово переходит к строке ниже этого решения, исправим сами ошибки. (Первыми 3 переменными имеют класс scope).

row = 0; 
    offset = 0; 
    oldPos = -1; 
    final String nonBreakingSpace = "\u00A0\u00A0"; 
    textV.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      int pos; 
      StringBuilder sb = new StringBuilder(textV.getText()); 

      pos = textV.getLayout().getLineStart(row); 
      if (oldPos!=-1 && pos<oldPos) 
      { 
       sb.delete(oldPos, oldPos + nonBreakingSpace.length()); 
      } 

      if (offset==0) 
      { 
       row++; 
       offset = -1; 
      } 
      else 
      { 
       offset = 0; 
      } 
      final int lineCount = textV.getLayout().getLineCount(); 
      pos = textV.getLayout().getLineStart(row); 
      oldPos = pos+offset; 
      if (row>=lineCount) 
      { 
       if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
        removeLayoutListenerPre16(textV.getViewTreeObserver(), this); 
       } else { 
        removeLayoutListenerPost16(textV.getViewTreeObserver(), this); 
       } 
       sb.insert(0, nonBreakingSpace); 
       sb.insert(sb.length(), nonBreakingSpace); 
      } 
      else 
      { 
       sb.insert(pos+offset, nonBreakingSpace);      
      } 
      textV.setText(sb); 
     } 
    }); 

и:

@SuppressWarnings("deprecation") 
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){ 
    observer.removeGlobalOnLayoutListener(listener); 
} 

@TargetApi(16) 
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){ 
    observer.removeOnGlobalLayoutListener(listener); 
} 
Смежные вопросы