0

内部にhtmlを含むテキストビューがあります。デバイスでは正しく表示されますが、プレビューではプレーンな HTML のように見えます。

プレーンな HTML ではなく、グラフィカル レイアウト ツールで最終結果を表示することはできますか?

前もって感謝します!

4

4 に答える 4

3

だから私は多くの時間が経過したことを知っていますが、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>

それが誰かを助けることを願っています!

于 2014-01-29T08:06:55.220 に答える
1

AFAIK Android では、グラフィカル レイアウト ツールの TextView に HTML のレンダリングが表示されません。アプリケーションを実行するときにのみ表示されます。

このTextViewクラスは、Html.fromHtml.

于 2013-10-03T12:48:51.080 に答える
0

私の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;
    }
}
}
于 2014-07-15T14:57:18.890 に答える
0

十分に明確ではありませんが、これを試してください

tv.setText(Html.fromHtml(yourString), TextView.BufferType.SPANNABLE);

または、TextView の代わりに webview を取得してみてください

webview.loadData(yourString,"text/html","utf-8");
于 2013-10-03T12:23:09.520 に答える