لودینگ هنگام لود شدن صفحات وب در وب ویو (WebView) ، حذف اسکرول افقی از وب ویو (WebView) ، یک ویو بسیار پرکاربرد در اندروید وب ویو WebView هستش که مشخصا برای نمایش صفحات وب در قالب اپلیکیشن استفاده میشه.
کار باهاش بشدت سادس فقط کافیه یه WebView به لایه اضافه کنید
همچنین بخوانید: ساخت پترن و اعمال opacity در اندروید با کاتلین
کار با وب ویو بشدت سادس فقط کافیه یه WebView به لایه اضافه کنید
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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"
android:scrollbars="vertical"
tools:context=".MainActivity">
<WebView
android:id="@+id/webivew"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
و آدرس url که میخواید رو با دستور زیر بهش بدید
webView.loadUrl("https://tejariapp.com/");
حالا میخوایم چندتا دستور کاربردی برای وب ویو بهتون بگیم پس با ما همراه باشید 🙂
با این دستورات میتونیم جاوا اسکریپت رو برای وب ویو فعال کنیم
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new AppWebViewClients());
webView.addJavascriptInterface(new WebAppInterface(), "Android");
با این دستور میتونیم اسکرول های افقی اضافی رو برا وب ویو حذف کنیم
webView.setHorizontalScrollBarEnabled(false);
با این دستور هم میتونیم برای وب ویو لودینگ بذاریم برای زمان هایی که صفحه هنوز لود نشده و زمانی که کامل لود شد لودینگ دستی ما از بین بره
webView.setOnTouchListener(new View.OnTouchListener() {
float m_downX;
public boolean onTouch(View v, MotionEvent event) {
if (event.getPointerCount() > 1) {
//Multi touch detected
return true;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
// save the x
m_downX = event.getX();
break;
}
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
// set x so that it doesn't move
event.setLocation(m_downX, event.getY());
break;
}
}
return false;
}
});
در نهایت اکتیویتی بدین صورت خواهد بود
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createNotif();
WebView webView = findViewById(R.id.webivew);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new AppWebViewClients());
webView.addJavascriptInterface(new WebAppInterface(), "Android");
webView.loadUrl("https://tejariapp.com/");
webView.setHorizontalScrollBarEnabled(false);
webView.setOnTouchListener(new View.OnTouchListener() {
float m_downX;
public boolean onTouch(View v, MotionEvent event) {
if (event.getPointerCount() > 1) {
//Multi touch detected
return true;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
// save the x
m_downX = event.getX();
break;
}
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
// set x so that it doesn't move
event.setLocation(m_downX, event.getY());
break;
}
}
return false;
}
});
}
public class AppWebViewClients extends WebViewClient {
private ProgressDialog progressDialog;
AppWebViewClients() {
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if (progressDialog == null) {
// in standard case YourActivity.this
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Loading...");
progressDialog.show();
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (progressDialog == null) {
// in standard case YourActivity.this
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Loading...");
progressDialog.show();
}
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
try {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
public class WebAppInterface {
WebAppInterface() {
}
@JavascriptInterface
public void showToast(String isSuccess, String amount) {
finish();
}
}
private void createNotif() {
NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getApplicationContext().getPackageName() + "/" + R.raw.noti_ring);
NotificationCompat.Builder nb = new NotificationCompat.Builder(this, getString(R.string.app_name));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(getString(R.string.app_name) + "1-2-3-4-5",
getString(R.string.app_name),
NotificationManager.IMPORTANCE_HIGH);
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.build();
// Configure the notification channel.
// mChannel.setDescription("this is message");
mChannel.enableLights(true);
mChannel.enableVibration(true);
mChannel.setSound(sound, attributes); // This is IMPORTANT
mNotificationManager.createNotificationChannel(mChannel);
nb.setChannelId(getString(R.string.app_name) + "1-2-3-4-5");
} else {
nb.setSound(sound);
}
nb.setSmallIcon(R.drawable.ic_launcher_background);
nb.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background));
nb.setContentTitle("title");
nb.setContentText("message");
nb.setStyle(new NotificationCompat.BigTextStyle().bigText("message"));
nb.setAutoCancel(true);
nb.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000, 1000, 1000});
nb.setLights(Color.GREEN, 3000, 3000);
//nb.setDefaults(Notification.DEFAULT_ALL);
nb.setPriority(Notification.PRIORITY_HIGH);
try {
mNotificationManager.notify(0, nb.build());
} catch (Exception e) {
}
}
}
امیدوارم این آموزش برای شما مفید بوده باشه…