evernote中的笔记,这里分享一下:
evernote笔记入口
用textview可以显示html富文本,比显示单纯的文字要友好很多,效果图:
Html.fromHtml(html, new ImageGetter() {...}, null);
drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*(cFontSize/16.0)), (int)(drawable.getIntrinsicHeight()*(cFontSize/16.0)));
Spanned spanned = Html.fromHtml(content, new ImageGetter(){ @Override public Drawable getDrawable(String source) { Drawable drawable = getResources().getDrawable( getResourceId(source)); drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*(cFontSize/16.0)), (int)(drawable.getIntrinsicHeight()*(cFontSize/16.0))); return drawable; } }, null);
Spanned spanned = Html.fromHtml(content, new ImageGetter() {...} , null); if (spanned instanceof SpannableStringBuilder) { ImageSpan[] imageSpans = spanned.getSpans(0, spanned.length(), ImageSpan.class); for (ImageSpan imageSpan : imageSpans) { int start = spanned.getSpanStart(imageSpan); int end = spanned.getSpanEnd(imageSpan); Drawable d = imageSpan.getDrawable(); ImageSpan newImageSpan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); ((SpannableStringBuilder) spanned).setSpan(newImageSpan, start, end, Spanned.SPAN_EXCLUSIVE_INCLUSIVE); ((SpannableStringBuilder) spanned).removeSpan(imageSpan); } }
@Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { Drawable b = mDrawable; canvas.save(); int transY = bottom - b.getBounds().bottom; if (mVerticalAlignment == ALIGN_BASELINE) { int textLength = text.length(); for (int i = 0; i < textLength; i++) { if (Character.isLetterOrDigit(text.charAt(i))) { transY -= paint.getFontMetricsInt().descent; break; } } } canvas.translate(x, transY); b.draw(canvas); canvas.restore(); }
public class StickerSpan extends ImageSpan { public StickerSpan(Drawable b, int verticalAlignment) { super(b, verticalAlignment); } @Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { Drawable b = getDrawable(); canvas.save(); int transY = bottom - b.getBounds().bottom - Utils.dip2px(WApplication.cFontLineSpacingExtra); if (mVerticalAlignment == ALIGN_BASELINE) { int textLength = text.length(); for (int i = 0; i < textLength; i++) { if (Character.isLetterOrDigit(text.charAt(i))) { transY -= paint.getFontMetricsInt().descent; break; } } } canvas.translate(x, transY); b.draw(canvas); canvas.restore(); } }