چطور از داخل اپلیکیشن ، صفحات وب را نشان دهیم؟ چطور یک مرورگر داخل اپلیکیشنمان داشته باشیم؟
- نفیسه افقی 4 سال قبل سوال کرد
- آخرین ویرایش 4 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید
کلاس WebView این امکان را به شما می دهد که صفحات وب را داخل اپلیکیشن خودتان بیاورید. WebView تمام قابلیت های یک مرورگر اینترنت را دارد. نظیر: تاریخچه، کوکی، پشتیبانی از html5 و خیلی ویژگی های دیگر. با WebView کارهای هیجان انگیز زیادی می توانید انجام دهید، مثل ادغام بازی های html5 در اپلیکیشنتان.
نمایش WebView
دو کار ساده باید انجام دهید:
1.WebView را در فایل xml موردنظر خود بگنجانید:
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
2. از داخل اکتیویتی خود، آدرس صفحه موردنظر را فراخوانی کنید:
WebView webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("https://google.com");
یادتان باشد که برای اتصال به اینترنت، باید اجازه دسترسی به اینترنت را در فایل AndroidManifest.xml قرار دهید:
<uses-permission android:name="android.permission.INTERNET" />
بروزرسانی اول:
اگر سایت داخل اپلیکیشن باز نشد و به جای آن مرورگر گوشی را باز کرد، از کد زیر استفاده کنید:
webView.setWebViewClient(new WebViewClient());
بروزرسانی دوم:
اگر جاوا اسکریپت های سایت کار نکرد، از کد زیر استفاده کنید:
webSetting.setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
بروزرسانی سوم:
اگر با ارور:
ERR_CLEARTEXT_NOT_PERMITTED although site is HTTPS [duplicate]
مواجه شدید، در فایل AndroidManifest و در تگ Application ، از کد زیر استفاده کنید:
<application
....
android:usesCleartextTraffic="true"
....>
بروزرسانی چهارم:
اگر می خواهید دکمه بازگشت گوشی روی WebView فعال شود و با زدن آن، کاربر به صفحه قبلی برگردد، از کد زیر استفاده کنید:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
//if Back key pressed and webview can navigate to previous page
webView.goBack();
// go back to previous page
return true;
}
else
{
finish();
// finish the activity
}
return super.onKeyDown(keyCode, event);
}
بروزرسانی پنجم:
اگر می خواهید هنگامی که کاربر منتظر باز شدن هر صفحه است، یک نوار پیشرفت نشان داده شود، به این ترتیب عمل کنید:
در فایل Layout ، یک ProgressBar
اضافه کنید:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:indeterminate="false"
android:layout_gravity="center"
/>
</FrameLayout>
و در اکتیویتی ، این کد ها را اضافه کنید:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
findViewById(R.id.progressBar1).setVisibility(View.GONE);
findViewById(R.id.webView).setVisibility(View.VISIBLE);
}
});
بروزرسانی ششم:
اگر می خواهید با پایین کشیدن صفحه ، محتوا رفرش یا بروزرسانی شود، از این لینک استفاده کنید.
پروژه نهایی
یک پروژه کامل را میتوانید به شکل زیر بسازید:
فایل MainActivity:
package com.example.mustang;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("https://www.mustang.ir");
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
findViewById(R.id.progressBar1).setVisibility(View.GONE);
findViewById(R.id.webView).setVisibility(View.VISIBLE);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
//if Back key pressed and webview can navigate to previous page
webView.goBack();
// go back to previous page
return true;
}
else
{
finish();
// finish the activity
}
return super.onKeyDown(keyCode, event);
}
}
فایل activity_main:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:indeterminate="false"
android:layout_gravity="center"
/>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
فایل AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mustang">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:usesCleartextTraffic="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Mustang">
<activity android:name=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoTitle"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- نفیسه افقی 4 سال قبل پاسخ داد
- آخرین ویرایش 4 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید