نمایش پنجره ی دیالوگ در اندروید
نمایش یک پنجره ی دیالوگ در اندروید
بعضی مواقع نیاز است که یک پنجره ی دیالوگ به کاربر نمایش داده شود.مثلا زمانی که نیاز به تأیید کاربر دارید.برای این کار میتوانید از متد ()onCreatedDialog که در کلاس پایه ی Activity است استفاده کنید.در زیر مثالی برای این کار زده شده است:
1.در ایکلیپس یک پروژه ی جدید بسازید.
2.قسمت های مشخص شده را در main.xml بنویسید.
3.در این مرحله باید برای دکمه ای که ساخته اید قابلیت کلیک کردن تعریف کنید.بعد از این کار بوسیله این کد AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.tihis) الرت دیالوگ را بسازید.اسمی که به دیالوگ اختصاص دادیم dialog است. پس از این به بعد هر زمانی که خواستید عناصر جدیدی به AlertDialog اضافه کنید ابتدا dialog را مینویسید و بعد از آن یک نقطه (.) قرار میدهید و بعد کد مورد نظر را مینویسید.
دستور dialog.setTitle عنوان دیالوگ را نمایش می دهد.دستور dialog.setMessage پیامی را که میخواهیم به کاربر نمایش می دهد.با دستور dialog.setIcon یک آیکون به دیالوگ اختصاص میدهید.و در نهایت دستور ()dialog.show دیالوگ را فعال کرده که به نمایش در آید.
نمایش یک Progress Dialog
یکی از قابلیت های مهم و کاربردی در اندروید استفاده از دیالوگ Please Wait است که کاربرد آن در مواقعی است که یک عملیات زمانبری در حال انجام است.در قسمت زیر با نحوه ی نمایش این دیالوگ آشنا می شوید.
- قسمت های مشخص شده را به فایل main.xml پروژه ی خود اضافه کنید:
2.قسمت های مشخص شده را به فایل MainActivity.java خود اضافه کنید:
3.برنامه را اجرا کنید.
روش کار به این صورت است که برای ایجاد Prodress Dialog ابتدا باید یک کلاس از ()ProgressDialog ایجاد کرده و متد ()show آن را فراخوانی کنید:
با این کار تنها پنجره ی مربوط به آن را باز می کند.از آنجا که این دیالوگ از نوع modal است,در هنگام نمایش دسترسی به قسمت های دیگر رابط کاربری را محدود می کند.برای ایجاد کردن یک پروسه ی زمانبر در پس زمینه, یک thread به وسیله ی بلاک Runnable ایجاد کنید.کدی که در متد Run نوشته شده در Thread دیگری اجرا می شود و به این ترتیب انجام یک کار زمانبر را شبیه سازی کرده اید تا کاربر با استفاده از متد ()sleep پنج ثانیه منتظر بماند.
بعد از 5 ثانیه متد ()dismiss فراخوانی می شود تا دیالوگ را محو کند.
نمایش یک Progress Dialog پیشرفته
علاوه بر نمایش یک پیام ساده مثل Please Wait میتوان مقدار پیشرفت یک پروسه ای مثل دانلود فایل را نمایش داد.در قسمت زیر به شما نشان می دهیم که چگونه یک Progress Dialog پیشرفته تر و بهتری داشته باشیم:
1.یک پروژه ی جدید بسازید و قسمت های مشخص شده را به main.xml اضافه کنید:
main.xml
<Button
android:id="@+id/btn_dialog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Click progress dialog"
android:onClick="onClick3"
/>
2. کدهای زیر را وارد فایل MainActivity.java کنید:
MainActivity.java
package com.PRG.progressdialogp;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick3(View v){
showDialog(1);
progressDialog.setProgress(0);
new Thread(new Runnable(){
public void run(){
for (int i=1; i<=20; i++){
try{
Thread.sleep(1000);
progressDialog.incrementProgressBy((int)(100/20));
}catch (InterruptedException e){
e.printStackTrace();
}
}
progressDialog.dismiss();
}
}).start();
}
protected Dialog onCreateDialog(int id){
switch (id ){
case 0:
return new AlertDialog.Builder(this)
.create();
case 1:
progressDialog = new ProgressDialog(this);
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle("Downloading...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "OK Clicked", Toast.LENGTH_SHORT).show();
}
});
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "cancel" ,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "cancel clicked!", Toast.LENGTH_SHORT).show();
}
});
return progressDialog;
}
return null;
}
}
3.برنامه را اجرا کنید.
توجه داشته باشید که شمارش باید تا 100 ادامه داشته باشد.
روش کار به این صورت است که برای ایجاد یک دیالوگ Progress که میخواهد یک عملیاتی را انجام دهد,ابتدا باید یک کلاس از ProressDialog ایجاد کرده و خصوصیاتی مانند آیکون,عنوان و استایل در آن تنظیم کنیم:
Create ProgressDialog Class
progressDialog = new ProgressDialog(this);
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle("Downloading...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
سپس دو دکمه ای که بر روی این دیالوگ قرار می گیرند را تنظیم کنیم:
Buttons
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "OK Clicked", Toast.LENGTH_SHORT).show();
}
});
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "cancel" ,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "cancel clicked!", Toast.LENGTH_SHORT).show();
}
});
return progressDialog;
نتیجه ی کدی که در بالا نوشته اید نمایش دیالوگ زیر است:
برای نمایش مقدار پیشرفت از شئ Thread و برای اجرای یک بلاک از کد Runnable استفاده می کنیم:
Prpgress view
progressDialog.setProgress(0);
new Thread(new Runnable(){
public void run(){
for (int i=1; i<=20; i++){
try{
Thread.sleep(1000);
progressDialog.incrementProgressBy((int)(100/20));
}catch (InterruptedException e){
e.printStackTrace();
}
}
progressDialog.dismiss();
}
}).start();
نتیجه به این صورت است که وقتی عددی که در دستور for وارد می کنید.آن عدد بر 100 تقسیم می شود و نتیجه ی آن هر عددی که شود تعیین می کند که پیشرفت عملیات دانلود با فاصله ی چند عددی ادامه پیدا کند که در اینجا عدد 20 را وارد کرده ایم که در نتیجه 100 تقسیم بر 20 می شود 5 و به این ترتیب درصد پیشرفت به صورت 5 درصد 5 درصد جلو میرود, و شما مشخص کرده اید که با تأخیر 1 ثانیه انجام شود.متد ()incrementProgressBy شمارنده ی Progress dialog را افزایش می دهد و هرگاه مقدار آن 100% شد این دیالوگ محو می شود.
- نوشته شده توسط سعید نوشادی
- بازدید: 9658
دیدگاهها
ّببخشید من یه سوال دیگه هم داشتم الان ما باید همه ی این کد هارو سوا از کد های تابع حفظ کنیم یا فقط در مواقع نیاز اشون استفاده کنیم و میشه پاسخ بدین ممنون
سلام دوست عزیز شما فقط زمانی که خواستید همچین قابلیتی رو اضافه کنید به برنامتون از این کدها استفاده کنید
سلام آقای نوشادی عزیز
ممنون میشم اگه توضیحاتتون رو بیشتر کنید