سبد (0)

نمایش پنجره ی دیالوگ در اندروید

نمایش یک پنجره ی دیالوگ در اندروید

بعضی مواقع نیاز است که یک پنجره ی دیالوگ به کاربر نمایش داده شود.مثلا زمانی که نیاز به تأیید کاربر دارید.برای این کار میتوانید از متد ()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 است که کاربرد آن در مواقعی است که یک عملیات زمانبری در حال انجام است.در قسمت زیر با نحوه ی نمایش این دیالوگ آشنا می شوید.

  1. قسمت های مشخص شده را به فایل 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% شد این دیالوگ محو می شود.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه