گاهی اوقات پیش می آید که می خواهیم یک صفحه از سایتمان را طوری نشان دهیم که به نظر نیاید که از مرورگر نمایش داده می شود. برای این کار چه باید کرد؟
- نفیسه افقی 5 سال قبل سوال کرد
- آخرین ویرایش 5 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید
همان طور که در این پست توضیح داده شده ، برای نمایش سایت در اپلیکیشن اندروید باید از کلاس WebView
استفاده کنیم.
حالا باید یک کار اضافه هم انجام بدهیم:
یعنی باید فایل XML آن صفحه ای که می خواهیم نمایش دهیم را پردازش کرده و قسمت هدر ( header ) و فوتر ( footer ) را از آن حذف کنیم ( ما کار پردازش XML را با کتابخانه jsoup
انجام می دهیم. برای استفاده از jsoup
، باید آن را در فایل build.gradle
تعریف کنید، بصورت زیر:
implementation 'org.jsoup:jsoup:1.10.3'
*دقت شود که هنگام Build کردن ، ابزار تحریم شکن روشن باشد!
*دقت کنید که کار با WebView
باید در UI Thread یعنی Thread اصلی انجام شود. ولی کار با jsoup
باید در یک non UI Thread انجام شود ( ما از AsyncTask
استفاده می کنیم) . پس کاری که باید انجام بدهیم این است که:
ابتدا در یک Thread پس زمینه ( یعنی در متد
doInBackground
از کلاسAsyncTAsk
) فایل XML را گرفته و آن را پردازش کنیم. سپس در متدonPostExecute
، آن را برای نمایش بهWebView
بدهیم.
کلاس AsyncTask
:
public class ShowArticle extends AsyncTask<Void, Void, Void[]> {
private String link;
private WebView mWebView = (WebView) findViewById(R.id.webView);
private String document_to_string;
public ShowArticle(String link) {
this.link = link;
}
protected Void[] doInBackground(Void... v) {
try {
//removing header and footer of the page ...........................................
Document document = Jsoup.connect(link).get();
document.getElementsByClass("wgl-theme-header").remove();
document.getElementsByClass("footer").remove();
document_to_string=document.toString();
}
catch (IOException e)
{
}
return v;
}
@Override
protected void onPostExecute(Void[] v) {
super.onPostExecute(v);
WebSettings ws = mWebView.getSettings();
ws.setJavaScriptEnabled(true);
//mWebView.loadData(document.toString(),"text/html","utf-8");
mWebView.loadDataWithBaseURL(link, document_to_string, "text/html", "utf-8", "");
}
}
کلاس MainActivity
:
//Showing article ..........................................................................
ShowArticle showArticle = new ShowArticle(link);
showArticle.execute();
*دقت شود که به جای اسم کلاس های “wgl-theme-header
” و “footer
” ، ممکن است لازم باشد اسم کلاس های منحصر به سایتتان را قرار دهید.
- نفیسه افقی 5 سال قبل پاسخ داد
- آخرین ویرایش 5 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید