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

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -