@@ -53,6 +53,7 @@ public class TableHandler extends TagNodeHandler {
5353 private int textColor = Color .BLACK ;
5454
5555 private static final int PADDING = 5 ;
56+ private boolean hasHeader ;
5657
5758 /**
5859 * Sets how wide the table should be.
@@ -116,6 +117,7 @@ private void readNode(Object node, Table table) {
116117 }
117118
118119 if (tagNode .getName ().equals ("th" )) {
120+ hasHeader = true ;
119121 Spanned result = this .getSpanner ().fromTagNode (tagNode , null );
120122 table .addCell (result );
121123 return ;
@@ -192,11 +194,12 @@ public void handleTagNode(TagNode node, SpannableStringBuilder builder,
192194 List <Spanned > row = table .getRows ().get (i );
193195 builder .append ("\uFFFC " );
194196
195- TableRowDrawable drawable = new TableRowDrawable (row , table .isDrawBorder ());
197+ TableRowDrawable drawable = new TableRowDrawable (row , table .isDrawBorder (), i == 0 && hasHeader ? Alignment . ALIGN_CENTER : Alignment . ALIGN_NORMAL );
196198 drawable .setBounds (0 , 0 , drawable .getIntrinsicWidth (),
197199 drawable .getIntrinsicHeight ());
198200
199- builder .setSpan (new ImageSpan (drawable ), start + i , builder .length (),Spannable .SPAN_EXCLUSIVE_EXCLUSIVE );
201+ int index = i == 0 ? start : builder .length () - 1 ;
202+ builder .setSpan (new ImageSpan (drawable ), index , builder .length (),Spannable .SPAN_EXCLUSIVE_INCLUSIVE );
200203 builder .append ("\n " );
201204 }
202205
@@ -205,7 +208,7 @@ public void handleTagNode(TagNode node, SpannableStringBuilder builder,
205208 the last row would appear detached.
206209 */
207210 builder .append ("\uFFFC " );
208- Drawable drawable = new TableRowDrawable (new ArrayList <Spanned >(), table .isDrawBorder ());
211+ Drawable drawable = new TableRowDrawable (new ArrayList <Spanned >(), table .isDrawBorder (), Alignment . ALIGN_NORMAL );
209212 drawable .setBounds (0 , 0 , tableWidth , 1 );
210213
211214 builder .setSpan (new ImageSpan (drawable ), builder .length () -1 , builder .length (),
@@ -231,15 +234,17 @@ public Alignment getAlignment() {
231234 */
232235 private class TableRowDrawable extends Drawable {
233236
237+ private final Alignment alignment ;
234238 private List <Spanned > tableRow ;
235239
236240 private int rowHeight ;
237241 private boolean paintBorder ;
238242
239- public TableRowDrawable (List <Spanned > tableRow , boolean paintBorder ) {
243+ public TableRowDrawable (List <Spanned > tableRow , boolean paintBorder , Alignment alignment ) {
240244 this .tableRow = tableRow ;
241245 this .rowHeight = calculateRowHeight (tableRow );
242246 this .paintBorder = paintBorder ;
247+ this .alignment = alignment ;
243248 }
244249
245250 @ Override
@@ -271,7 +276,7 @@ public void draw(Canvas canvas) {
271276
272277 StaticLayout layout = new StaticLayout (tableRow .get (i ),
273278 getTextPaint (), (columnWidth - 2 * PADDING ),
274- Alignment . ALIGN_NORMAL , 1f , 0f , true );
279+ alignment , 1f , 0f , true );
275280
276281 canvas .translate (offset + PADDING , 0 );
277282 layout .draw (canvas );
0 commit comments