Skip to content
This repository was archived by the owner on Sep 7, 2020. It is now read-only.

Add setRemoveFromHtmlSpace function/ cleanup example #37

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class HtmlTextView extends JellyBeanSpanFixTextView {
public static final boolean DEBUG = false;
boolean mDontConsumeNonUrlClicks = true;
boolean mLinkHit;
private boolean removeFromHtmlSpace = false;
private ClickableTableSpan mClickableTableSpan;
private DrawTableLinkSpan mDrawTableLinkSpan;

Expand All @@ -46,6 +47,13 @@ public HtmlTextView(Context context) {
super(context);
}

/**
* Note that this must be called before setting text for it to work
*/
public void setRemoveFromHtmlSpace(boolean removeFromHtmlSpace) {
this.removeFromHtmlSpace = removeFromHtmlSpace;
}

public interface ImageGetter {
}

Expand Down Expand Up @@ -118,8 +126,11 @@ public void setHtmlFromString(String html, ImageGetter imageGetter) {
final HtmlTagHandler htmlTagHandler = new HtmlTagHandler();
htmlTagHandler.setClickableTableSpan(mClickableTableSpan);
htmlTagHandler.setDrawTableLinkSpan(mDrawTableLinkSpan);
setText(Html.fromHtml(html, htmlImageGetter, htmlTagHandler));

if (removeFromHtmlSpace) {
setText(removeHtmlBottomPadding(Html.fromHtml(html, htmlImageGetter, htmlTagHandler)));
} else {
setText(Html.fromHtml(html, htmlImageGetter, htmlTagHandler));
}
// make links work
setMovementMethod(LocalLinkMovementMethod.getInstance());
}
Expand Down Expand Up @@ -153,4 +164,17 @@ public void setClickableTableSpan(ClickableTableSpan clickableTableSpan) {
public void setDrawTableLinkSpan(DrawTableLinkSpan drawTableLinkSpan) {
this.mDrawTableLinkSpan = drawTableLinkSpan;
}

private CharSequence removeHtmlBottomPadding(CharSequence text) {
if (text == null) {
return null;
} else if (text.length() == 0) {
return text;
}

while (text.charAt(text.length() - 1) == '\n') {
text = text.subSequence(0, text.length() - 1);
}
return text;
}
}
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ See LICENSE for full license text.
- Original [HtmlLocalImageGetter](http://stackoverflow.com/a/22298833) developed by drawk
- [JellyBeanSpanFixTextView](https://gist.github.com/pyricau/3424004) (with fix from comment) developed by Pierre-Yves Ricau
- [Table support](https://github.com/SufficientlySecure/html-textview/pull/33) added by Richard Thai
- [setRemoveFromHtmlSpace](https://github.com/SufficientlySecure/html-textview/pull/37) added by [Derek Smith](https://github.com/derekcsm)

## Contributions

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package org.sufficientlysecure.htmltextview.example;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.text.Html;
import android.view.View;

import org.sufficientlysecure.htmltextview.ClickableTableSpan;
Expand Down Expand Up @@ -33,75 +37,16 @@ public void onClick(View widget) {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

HtmlTextView text = (HtmlTextView) findViewById(R.id.html_text);

text.setRemoveFromHtmlSpace(true);
text.setClickableTableSpan(new ClickableTableSpanImpl());
DrawTableLinkSpan drawTableLinkSpan = new DrawTableLinkSpan();
drawTableLinkSpan.setTableLinkText("[tap for table]");
text.setDrawTableLinkSpan(drawTableLinkSpan);
text.setHtmlFromString(
"<h2>Hello world</h2>" +
"<table>" +
" <tr>" +
" <th>Header 1</th>" +
" <th>Header 2</th>" +
" </tr>" +
" <tr>" +
" <td>mo data</td>" +
" <td>mo problems</td>" +
" </tr>" +
"</table>" +
"<br/>" +
"<ul>" +
" <li>cats</li>" +
" <li>dogs Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet Lorem" +
" ipsum dolor sit amet</li>" +
"</ul>" +
"<br/>" +
"<ol>" +
" <li>first</li>" +
" <li>second" +
" <ol>" +
" <li>second - first" +
" <br/>newline" +
" </li>" +
" </ol>" +
" </li>" +
"</ol>" +
"<table>" +
" <tr>" +
" <th>Month</th>" +
" <th>Savings</th>" +
" </tr>" +
" <tr>" +
" <td>January</td>" +
" <td>$100</td>" +
" </tr>" +
" <tr>" +
" <td>" +
" <TABLE>" +
" <TR>" +
" <TH>Header 1</TH>" +
" <TH>Header 2</TH>" +
" </TR>" +
" <TR>" +
" <TD>1st cell</TD>" +
" <TD>2nd cell</TD>" +
" </TR>" +
" </TABLE>" +
" </td>" +
" <td>yo dawg</td>" +
" </tr>" +
"</table>" +
"<br/>" +
"<img src=\"cat\"/>" +
"<br/>A very long text follows below and it contains bold parts. This can" +
"cause a crash " +
"<a href=\"http://code.google.com/p/android/issues/detail?id=35466\">on some" +
" Android versions</a> when using a normal TextView, but our implementation " +
"should workaround that bug." +
"<br/>" +
"<br/>" +
"Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>Lo<b>remips</b>umdol<b>orsita</b>metLorem<b>ipsu</b>mdo<b>lorsit</b>ametLoremip<b>sumdolorsitamet.</b>",
text.setHtmlFromString(getResources().getString(R.string.test_html),
new HtmlTextView.LocalImageGetter());
}

}
37 changes: 26 additions & 11 deletions example/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
@@ -1,17 +1,32 @@
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f8f8f8"
tools:context=".MainActivity">

<org.sufficientlysecure.htmltextview.HtmlTextView
android:id="@+id/html_text"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:textAppearance="@android:style/TextAppearance.Small" />
android:orientation="vertical">

<View
android:layout_width="match_parent"
android:layout_height="@dimen/activity_vertical_margin"/>

<org.sufficientlysecure.htmltextview.HtmlTextView
android:id="@+id/html_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:background="@android:color/white"
android:textAppearance="@android:style/TextAppearance.Small"/>

<View
android:layout_width="match_parent"
android:layout_height="@dimen/activity_vertical_margin"/>

</LinearLayout>

</ScrollView>
96 changes: 96 additions & 0 deletions example/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,99 @@
<resources>
<string name="app_name">HtmlTextView Example</string>

<string name="test_html"><![CDATA[
<p>
<h2>Hello world</h2>
<table>
<tr>
<th>Header 1</th>
<th>Header 2</th>
</tr>
<tr>
<td>mo data</td>
<td>mo problems</td>
</tr>
</table>
<br/>
<ul>
<li>cats</li>
<li>dogs Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet</li>
</ul>
<br/>
<ol>
<li>first</li>
<li>second
<ol>
<li>second - first
<br/>
newline
</li>
</ol>
</li>
</ol>
<table>
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$1,000,000</td>
</tr>
<tr>
<td>
<TABLE>
<TR>
<TH>Header 1</TH>
<TH>Header 2</TH>
</TR>
<TR>
<TH>Cell 1</TH>
<TH>Cell 2</TH>
</TR>
</TABLE>
</td>
<td>yo dawg</td>
</tr>
</table>
<br/>
<img src=\"cat\"/>
<br/>
A very long text follows below and it contains bold parts. This can cause a crash
<a href="http://code.google.com/p/android/issues/detail?id=35466">on some Android versions</a>
when using a normal TextView, but our implementation should workaround that bug.
<br/>
<br/>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ut eros sed arcu auctor tincidunt
id sit amet elit. Mauris in faucibus neque. Suspendisse facilisis urna nec nisi convallis tincidunt.
Mauris at elit et arcu viverra auctor. Nullam et arcu ultricies, iaculis dolor efficitur, tristique eros.
Interdum et malesuada <b>some bold text in here</b> fames ac ante ipsum primis in faucibus.
Integer nec aliquet mi. Aenean ipsum odio,
iaculis et est eget, condimentum bibendum dui. Aenean nec elementum tortor. Vestibulum tincidunt mi sit
amet tortor semper tincidunt. Sed tincidunt metus et pretium semper. Phasellus neque est, congue nec
metus ac, ullamcorper varius sapien. Integer nec tortor vel justo finibus gravida id quis purus.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum
aliquam convallis dapibus. Aenean suscipit, orci id elementum vehicula, odio arcu fringilla massa,
vel imperdiet augue est non mi.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ut eros sed arcu auctor tincidunt
id sit amet elit. Mauris in faucibus neque. Suspendisse facilisis urna nec nisi convallis tincidunt.
Mauris at elit et arcu viverra auctor. Nullam et arcu ultricies, iaculis dolor efficitur, tristique eros.
Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer nec aliquet mi. Aenean ipsum odio,
iaculis et est eget, condimentum bibendum dui. Aenean nec elementum tortor. Vestibulum tincidunt mi sit
amet tortor semper tincidunt. Sed tincidunt metus et pretium semper. Phasellus neque est, congue nec
metus ac, <b>ullamcorper varius sapien. Integer nec tortor vel justo finibus gravida id quis purus.</b>
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum
aliquam convallis dapibus. Aenean suscipit, orci id elementum vehicula, odio arcu fringilla massa,
vel imperdiet augue est non mi.
</p>
<p>
Android will add extra space at the bottom of the textView by default fromHtml,
use <code>setRemoveFromHtmlSpace(true)</code> on your <b>HtmlTextView</b>
before setting text to prevent this from happening.
</p
</p>
]]></string>
</resources>