باز کردن لینک درون HTML از طریق webview
تیتر سوال رو نمیدونستم باید چطور بنویسم :(
من از webview استفاده کردم تا فایل های html رو نشون بده ولی تو فایل html لینک به چندتا سایت گذاشتم که نمیتونه باز کنه چون تو پوشه asset نیستن ، چطور میشه کاری کنم وقتی رو لینک کلیک کردن از طریق مرورگر خود گوشیشون لینک اجرا بشه و کاری به برنامه من نداشته باشه ؟

اینم کدی که واسه اجرای html نوشتم
private WebView mWebview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app);
mWebview = new WebView(this);
mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript
final Activity activity = this;
mWebview.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
}
});
mWebview.loadUrl("file:///android_asset/winapp/index.html");
setContentView(mWebview);
}
الان لینک رو باز میکنه ولی داخل خود webview و دوباره واسه لینک دانلود و بقیه چیزایی که تو سایت هست هیچ عکس العملی نشون نمیده ، چطور میشه کدی بنویسم که لینک های داخل html از طریق مرورگر گوشی باز بشه و اکتیویتی هم بسته نشه ؟ الان وقتی لینک رو باز میکنه دکمه برگشت گوشی رو میزنم از اکتیویتی خارج میشه
برای کنترل رفتار وب ویو در مواجهه با آدرس جدید از WebViewClient استفاده میشه
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView webView=(WebView)findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}});
String html = "<html><body><a href='http://www.google.com'>Go !</a></body></html>";
webView.loadData(html, "text/html", null);
}
}
کد کامل یه اکتیویتی رو به عنوان مثال اضافه کردم
کدی که نوشتین درست کار میکرد و مشکلی نداشت ولی چطور میشه یک فایل html که تو asset قرار داره رو باز کنه ؟
کد شما رو اینجوری تغییر دادم و برنامه کرش میکنه :
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setBuiltInZoomControls(true);
webView.getSettings().setJavaScriptEnabled(true); // enable javascript
final Activity activity = this;
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
});
webView.loadUrl("file:///android_asset/win.html");
setContentView(webView);
}
}
public class mainactivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setBuiltInZoomControls(true);
webSettings.setJavaScriptEnabled(true); // enable javascript
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(mainactivity.this, description, Toast.LENGTH_SHORT).show();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
});
webView.loadUrl("file:///android_asset/win.html");
//setContentView(webView);
}
}
و ایرادش - وقتی layout رو ست کردی یعنی وب ویویی که توی xml تعریف کردی میشه فرزند - مجدد آخر متد هم داری وب ویو رو فرزند قرار میدی - حاصل میشه ارور اینکه ویوی جاری (وب ویو) پدر دیگه ای داره - که البته با اروری که بالا تصویر گذاشته بودی متفاوت بود
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
