android - Render Html Elements on WebView for EPub Reader -
i'm making epub reader the library paul siegmann http://www.siegmann.nl/epublib/android
i extracted table of contents listview, , item linked webview displays content of chosen chapter.
i don't find problem in displaying e-pub file has pure text elements, when comes e-pub file containing html elements (links, images), can't displayed.
does know how render html elements on webview according case?
here classes:
public class epubreaderactivity extends listactivity { private layoutinflater inflater; private list<rowdata> contentdetails; public static final string book_name = "ferring.epub"; /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); inflater = (layoutinflater) getsystemservice(activity.layout_inflater_service); contentdetails = new arraylist<rowdata>(); assetmanager assetmanager = getassets(); try { inputstream epubinputstream = assetmanager.open(book_name); book book = (new epubreader()).readepub(epubinputstream); logcontentstable(book.gettableofcontents().gettocreferences(), 0); } catch (ioexception e) { log.e("epublib", e.getmessage()); } customadapter adapter = new customadapter(this, r.layout.list, r.id.title, contentdetails); setlistadapter(adapter); getlistview().settextfilterenabled(true); } private class customadapter extends arrayadapter<rowdata>{ public customadapter(context context, int resource, int textviewresourceid, list<rowdata> objects) { super(context, resource, textviewresourceid, objects); } private class viewholder{ private view row; private textview titleholder = null; public viewholder(view row) { super(); this.row = row; } public textview gettitle() { if(null == titleholder) titleholder = (textview) row.findviewbyid(r.id.title); return titleholder; } } @override public view getview(int position, view convertview, viewgroup parent) { viewholder holder = null; textview title = null; rowdata rowdata = getitem(position); if(null == convertview){ convertview = inflater.inflate(r.layout.list, null); holder = new viewholder(convertview); convertview.settag(holder); } holder = (viewholder) convertview.gettag(); title = holder.gettitle(); title.settext(rowdata.gettitle()); return convertview; } } private void logcontentstable(list<tocreference> tocreferences, int depth) { if (tocreferences == null) { return; } (tocreference tocreference:tocreferences) { stringbuilder tocstring = new stringbuilder(); (int = 0; < depth; i++) { tocstring.append("\t"); } tocstring.append(tocreference.gettitle()); rowdata row = new rowdata(); row.settitle(tocstring.tostring()); row.setresource(tocreference.getresource()); contentdetails.add(row); logcontentstable(tocreference.getchildren(), depth + 1); } } private class rowdata{ private string title; private resource resource; public rowdata() { super(); } public string gettitle() { return title; } public resource getresource() { return resource; } public void settitle(string title) { this.title = title; } public void setresource(resource resource) { this.resource = resource; } } @override protected void onlistitemclick(listview l, view v, int position, long id) { super.onlistitemclick(l, v, position, id); rowdata rowdata = contentdetails.get(position); intent intent = new intent(epubreaderactivity.this, contentviewactivity.class); try { intent.putextra("display", new string(rowdata.getresource().getdata())); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } startactivity(intent); } } content class:
public class contentviewactivity extends activity { webview webview; @override protected void oncreate(bundle savedinstancestate) { // todo auto-generated method stub super.oncreate(savedinstancestate); setcontentview(r.layout.content); webview = (webview) findviewbyid(r.id.web); webview.getsettings().setjavascriptenabled(true); string displaystring = getintent().getextras().getstring("display"); if(displaystring != null) webview.loaddata(displaystring, "text/html", "utf-8"); } } p.s: don't wanna use pageturner (http://www.pageturner-reader.org/) or fbreader (http://www.fbreader.org/fbreaderj), since both of them need gpl license commercial use.
actually, html-rendering part of pageturner split off separate library apache licensed.
i did since figured useful commercial projects well.
the rendering library here: http://github.com/nightwhistler/htmlspanner
Comments
Post a Comment