内部にhtmlを含むテキストビューがあります。デバイスでは正しく表示されますが、プレビューではプレーンな HTML のように見えます。
プレーンな HTML ではなく、グラフィカル レイアウト ツールで最終結果を表示することはできますか?
前もって感謝します!
内部にhtmlを含むテキストビューがあります。デバイスでは正しく表示されますが、プレビューではプレーンな HTML のように見えます。
プレーンな HTML ではなく、グラフィカル レイアウト ツールで最終結果を表示することはできますか?
前もって感謝します!
だから私は多くの時間が経過したことを知っていますが、Android Studio のレイアウト エディターで HTML をプレビューする方法を見つけました (Eclipse については知りません)。
だから私はちょうどカスタム TextView callet HtmlTextView を作成しました:
public class HtmlTextView extends TextView {
public HtmlTextView(Context context) {
super(context);
}
public HtmlTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public HtmlTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setText(CharSequence text, BufferType type) {
Spanned html = null;
if(text != null) {
html = Html.fromHtml(text.toString());
super.setText(html, BufferType.SPANNABLE);
} else {
super.setText(text, type);
}
}
}
その後は、それを使用するだけの問題です:
<com.example.app.custom.views.HtmlTextView
android:text="@string/your_html_string"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
文字列リソースは次のようになります。
<string name="your_html_string"><![CDATA[My <b><font color=\'#E55720\'>AWESOME</font></b> html]]></string>
それが誰かを助けることを願っています!
AFAIK Android では、グラフィカル レイアウト ツールの TextView に HTML のレンダリングが表示されません。アプリケーションを実行するときにのみ表示されます。
このTextView
クラスは、Html.fromHtml
.
私のEclipse Layout-Previewにはストライクタグが表示されなかったため、@Arthurからの回答を拡張しました。
public class HtmlTextView extends TextView {
CustomHtmlTagHandler tagHandler = new CustomHtmlTagHandler();
public HtmlTextView(Context context) {
super(context);
}
public HtmlTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public HtmlTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setText(CharSequence text, BufferType type) {
Spanned html = null;
if(text != null) {
html = Html.fromHtml(text.toString(), null, tagHandler);
super.setText(html, BufferType.SPANNABLE);
} else {
super.setText(text, type);
}
}
}
これは CustomHtmlTagHandler です。
public class CustomHtmlTagHandler implements TagHandler {
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
if(tag.equalsIgnoreCase("strike") || tag.equals("s")) {
processStrike(opening, output);
}
}
private void processStrike(boolean opening, Editable output) {
int len = output.length();
if(opening) {
output.setSpan(new StrikethroughSpan(), len, len, Spannable.SPAN_MARK_MARK);
} else {
Object obj = getLast(output, StrikethroughSpan.class);
int where = output.getSpanStart(obj);
output.removeSpan(obj);
if (where != len) {
output.setSpan(new StrikethroughSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
private Object getLast(Editable text, Class kind) {
Object[] objs = text.getSpans(0, text.length(), kind);
if (objs.length == 0) {
return null;
} else {
for(int i = objs.length;i>0;i--) {
if(text.getSpanFlags(objs[i-1]) == Spannable.SPAN_MARK_MARK) {
return objs[i-1];
}
}
return null;
}
}
}
十分に明確ではありませんが、これを試してください
tv.setText(Html.fromHtml(yourString), TextView.BufferType.SPANNABLE);
または、TextView の代わりに webview を取得してみてください
webview.loadData(yourString,"text/html","utf-8");