android學習筆記之ProgressDialog的使用

來源:互聯網
上載者:User

  在很多PC軟體或手機軟體中,我們都會看見 “載入中...” 類似的對話方塊,當然,在android應用程式中也是如此。如果我們想在android應用程式中使用這樣的效果,那麼就需要用到ProgressDialog。首先,我們來看一下ProgressDialog這個類。

       ProgressDialog類繼承自AlertDialog類,同樣存放在android.app包中。ProgressDialog有兩種形式,一種是圓圈旋轉形式,一種是水平進度條形式,選擇哪種形式可以通過以下兩個屬性值來設定:

 

static int STYLE_HORIZONTAL
          Creates a ProgressDialog with a horizontal progress bar.
static int STYLE_SPINNER
          Creates a ProgressDialog with a ciruclar, spinning progress bar.

注意,當設定為水平進度條形式時,進度的取值範圍為0—10000。

 

ProgressDialog的構造方法有以下兩種:

 

ProgressDialog(Context context)
           
ProgressDialog(Context context, int theme)
           

 

 除了構造方法外,ProgressDialog還提供的如下的靜態方法返回ProgressDialog對象:

 

static ProgressDialog show(Context context, CharSequence title, CharSequence message)
           
static ProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate)
           
static ProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable)
           
static ProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, DialogInterface.OnCancelListener cancelListener) 

 

需要留意的是第一個參數必須是目前啟動並執行Activity的Context。

 

       android的ProgressDialog必須要在背景程式運行完畢前,以dismiss()方法來關閉取得焦點的對話方塊,否則程式就會陷入無法終止的無窮迴圈中。線上程中,不得有任何更改Context或parent View的任何狀態,文字輸出等時間,因為線程裡的Context與View並不屬於parent,兩者之間也沒有關聯。

 

我們以下面一個簡單的程式來學習ProgressDialog的應用:

[java]   public class MainActivity extends Activity  

    private Button button=null; 
    public ProgressDialog dialog=null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState)  
    { 
        super.onCreate(savedInstanceState); 
        super.setContentView(R.layout.activity_main); 
        this.button=(Button)super.findViewById(R.id.button); 
        this.button.setOnClickListener(new OnClickListener()  
        {            
            @Override 
            public void onClick(View v)  
            { 
                final CharSequence strDialogTitle=MainActivity.this.getString(R.string.str_dialog_title); 
                final CharSequence strDialogBody=MainActivity.this.getString(R.string.str_dialog_body); 
                //顯示Progress對話方塊  
                dialog=ProgressDialog.show(MainActivity.this,strDialogTitle,strDialogBody,true); 
                 
                new Thread() 
                { 
                    @Override 
                    public void run() 
                    { 
                        try 
                        { 
                            //表示後台啟動並執行程式碼片段,以暫停3秒代替  
                            sleep(3000); 
                        } 
                        catch (InterruptedException e)  
                        { 
                            e.printStackTrace(); 
                        } 
                        finally 
                        { 
                            //卸載dialog對象  
                            dialog.dismiss(); 
                        } 
                    } 
                     
                }.start(); 
            } 
        }); 
    } 
 

public class MainActivity extends Activity
{
    private Button button=null;
 public ProgressDialog dialog=null;
 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  super.setContentView(R.layout.activity_main);
  this.button=(Button)super.findViewById(R.id.button);
  this.button.setOnClickListener(new OnClickListener()
  {   
   @Override
   public void onClick(View v)
   {
    final CharSequence strDialogTitle=MainActivity.this.getString(R.string.str_dialog_title);
    final CharSequence strDialogBody=MainActivity.this.getString(R.string.str_dialog_body);
    //顯示Progress對話方塊
    dialog=ProgressDialog.show(MainActivity.this,strDialogTitle,strDialogBody,true);
    
    new Thread()
    {
     @Override
     public void run()
     {
      try
      {
       //表示後台啟動並執行程式碼片段,以暫停3秒代替
       sleep(3000);
      }
      catch (InterruptedException e)
      {
       e.printStackTrace();
      }
      finally
      {
       //卸載dialog對象
       dialog.dismiss();
      }
     }
     
    }.start();
   }
  });
 }

}
該程式布局管理器僅需一個Button組件(id為button)即可,此處不再給出。

注意,為了代碼更加符合規範,本程式在strings.xml中定義了如下字串資源:

[html]  <?xml version="1.0" encoding="utf-8"?> 
<resources> 
 
    <string name="app_name">demo2</string> 
    <string name="action_settings">Settings</string> 
    <string name="hello_world">Hello world!</string> 
    <string name="execute">執行</string> 
    <string name="str_dialog_title">請稍等片刻</string> 
    <string name="str_dialog_body">正在執行...</string> 
 
</resources> 

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">demo2</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="execute">執行</string>
    <string name="str_dialog_title">請稍等片刻</string>
    <string name="str_dialog_body">正在執行...</string>

</resources>
程式運行效果:

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.