其他幾種常用對話方塊基本使用
本節引言:
上節我們對Dialog的父類別:AlertDialog進行了學習,而本節我們來學習下幾個常用的 Dialog的基本使用,他們分別是:ProgressDialog(進度條對話框),DatePickerDialog (日期選擇對話框)和TimePickerDialog(時間選擇對話框)~,話不多說,開始本節內容~
1.ProgressDialog(進度條對話框)的基本使用
我們建立進度條對話框的方式有兩種:
- #1.直接呼叫ProgressDialog提供的靜態方法show()顯示
- 2.建立ProgressDialog,再設定對話方塊的參數,最後show()出來
程式碼範例:
運行效果圖:
#關鍵實作程式碼:
MainActivity .java:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button b/)# ;
private ProgressDialog pd1 = null;
private ProgressDialog pd2 = null;
private final static int MAXVALUE = 100 = 0;
private Context mContext = null;
//定義一個用於更新進度的Handler,因為只能由主執行緒更新介面,所以要用Handler傳遞訊息
final Handler hand = new Handler( Override
public void handleMessage(Message msg) {
123)
{
//且已設進度條的目前價值
pd2.setProgress(progressStart);
呼叫dismiss()方法關閉對話方塊
if(progressStart >= MAXVALUE)
{
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;##NainActivity。bindViews();
}
# private void bindViews() {
tn_two = (Button) findViewById(R.id .btn_two);
btn_three = (Button) findViewById(R.id.btn_three);
setOnClickListener(this);
btn_three.setOnClickListener(this) ;
}
## @Override
public void onClick(View v) {
case R.id.btn_one:
//這裡的文字參數依序為,「標題,內容,是否顯示進度,是否可用取消按鈕關閉
"資源加載中,請稍後...",false,true);
break;
pd1 = new ProgressDialog(mContext);
//依序設定標題,內容,是否使用取消按鈕關閉,是否顯示進度
pd1.setTitle("軟體更新");
pd1.setCancelable( true);
//這裡是設定進度條的風格,HORIZONTAL是水平進度條,SPINNER是圓形進度條## log.STYLE_HORIZONTAL);
pd1.setIndeterminate(true);
//調用show()方法將ProgressDialog顯示出來
pd1.show();
case R.id.btn_three:
//初始化屬性
## add = 0;
= new ProgressDialog(MainActivity.this);
pd2.setMax(MAX );# ");
pd2.setMessage("文件載入中,請稍後...");
pd2.setCancelable(false) ;
pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd2.setIndeterminate(false);
//這裡的文字新建一個執行緒,重寫run()方法,
new Thread()
# public void run()
{
while(progressStart < MAX {
//這裡的演算法為決定的進度條約 progressStart = 2 * usetime() ;
把信息碼發送給handle讓更新界面
hand.sendEmptyMessage(123);
}
}
}.start();
break;
}
}
//這裡設定耗時的方法:
private int usetime() {
add++;# sleep(100);
}catch ( InterruptedException e) {
e.printStackTrace();
}##1
程式碼同樣很簡單,就不解釋了~
3.程式碼下載:DialogDemo.zipDialogDemo1.zip
本節小結:
private Button b/)# ;
private ProgressDialog pd1 = null;
private ProgressDialog pd2 = null;
private final static int MAXVALUE = 100 = 0;
private Context mContext = null;
//定義一個用於更新進度的Handler,因為只能由主執行緒更新介面,所以要用Handler傳遞訊息
final Handler hand = new Handler( Override
public void handleMessage(Message msg) {
123)
{
//且已設進度條的目前價值
pd2.setProgress(progressStart);
呼叫dismiss()方法關閉對話方塊
if(progressStart >= MAXVALUE)
{
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;##NainActivity。bindViews();
}
# private void bindViews() {
tn_two = (Button) findViewById(R.id .btn_two);
btn_three = (Button) findViewById(R.id.btn_three);
setOnClickListener(this);
btn_three.setOnClickListener(this) ;
}
## @Override
public void onClick(View v) {
case R.id.btn_one:
//這裡的文字參數依序為,「標題,內容,是否顯示進度,是否可用取消按鈕關閉
"資源加載中,請稍後...",false,true);
break;
pd1 = new ProgressDialog(mContext);
//依序設定標題,內容,是否使用取消按鈕關閉,是否顯示進度
pd1.setTitle("軟體更新");
pd1.setCancelable( true);
//這裡是設定進度條的風格,HORIZONTAL是水平進度條,SPINNER是圓形進度條## log.STYLE_HORIZONTAL);
pd1.setIndeterminate(true);
//調用show()方法將ProgressDialog顯示出來
pd1.show();
case R.id.btn_three:
//初始化屬性
## add = 0;
= new ProgressDialog(MainActivity.this);
pd2.setMax(MAX );# ");
pd2.setMessage("文件載入中,請稍後...");
pd2.setCancelable(false) ;
pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd2.setIndeterminate(false);
//這裡的文字新建一個執行緒,重寫run()方法,
new Thread()
# public void run()
{
while(progressStart < MAX {
//這裡的演算法為決定的進度條約 progressStart = 2 * usetime() ;
把信息碼發送給handle讓更新界面
hand.sendEmptyMessage(123);
}
}
}.start();
break;
}
}
//這裡設定耗時的方法:
private int usetime() {
add++;# sleep(100);
}catch ( InterruptedException e) {
e.printStackTrace();
}##1
程式碼比較簡單,而關於Progress的東西我們已經在前面學習過了,這裡就不囉嗦了~
2.DatePickerDialog(日期選擇對話框)與TimePickerDialog(時間選擇對話框)
先要說明一點: Date/TimePickerDialog只是供使用者選擇日期時間,對於android系統的系統時間, 日期沒有任何影響,google暫時沒有公佈系統日期時間設定的API, 如果要在app中設定的話,要重新編譯android的系統原始碼,非常麻煩!
他們兩個的建構方法非常相似:DatePickerDialog(上下文;DatePickerDialog.OnDateSetListener()監聽器;年;月;日)
TimePickerDialog(上下文;TimePickerDialog.OnTimeSetListener()監聽器;小時,分鐘,是否採用24小時制)
程式碼範例:
#執行效果圖:
關鍵實作程式碼:
MainActivity.java:
公共類別MainActivity 擴充AppCompatActivity 實作View.OnClickListener{
私有按鈕btn_date;
私有按鈕btn_time;##
@Override
protected void onCreate(Bundle savedInstanceState) {
ivity_main);
bindViews();
}
private void bindViews() {
btn_date = (Button) findViewById yId(R.id.btn_time);
btn_date.setOnClickListener(this);
btn_time.setOnClickListener(this);
}
結果 = "";
switch (v.getId()){
case R.id. Instance();
new DatePickerDialog(MainActivity.this,new Date) PickerDialog.OnDateSetListener(OnDateSetListener(OnDateSetListener ) {
@Override
5 # //以這裡中所獲得的月份需求中加上1~喔
結果 += "你選擇的是"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日";
LENGTH_SHORT).show( );
}
}
,cale1.get(日曆.年)
,cale1.get(日曆.月)
,cale1.get(Calendar.DAY_OF_MONTH)).show( );
break;
case .getInstance();
new TimePickerDialog(MainActivity.this, new TimePi ckerDialog.OnTimeSetListenerener() @覆蓋
public void onTimeSet(TimePicker view, int hourOf 結果 = "";
min+"分" ;
Toast.makeText(getApplicationContext(), 結果, Toast.LENGTH_SHORT#();}
}, cale2.get(Calendar.HOUR_OF_DAY), cale2.get(Calendar.MINUT
}
}
}
私有按鈕btn_date;
私有按鈕btn_time;##
@Override
protected void onCreate(Bundle savedInstanceState) {
ivity_main);
bindViews();
}
private void bindViews() {
btn_date = (Button) findViewById yId(R.id.btn_time);
btn_date.setOnClickListener(this);
btn_time.setOnClickListener(this);
}
結果 = "";
switch (v.getId()){
case R.id. Instance();
new DatePickerDialog(MainActivity.this,new Date) PickerDialog.OnDateSetListener(OnDateSetListener(OnDateSetListener ) {
@Override
5 # //以這裡中所獲得的月份需求中加上1~喔
結果 += "你選擇的是"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日";
LENGTH_SHORT).show( );
}
}
,cale1.get(日曆.年)
,cale1.get(日曆.月)
,cale1.get(Calendar.DAY_OF_MONTH)).show( );
break;
case .getInstance();
new TimePickerDialog(MainActivity.this, new TimePi ckerDialog.OnTimeSetListenerener() @覆蓋
public void onTimeSet(TimePicker view, int hourOf 結果 = "";
min+"分" ;
Toast.makeText(getApplicationContext(), 結果, Toast.LENGTH_SHORT#();}
}, cale2.get(Calendar.HOUR_OF_DAY), cale2.get(Calendar.MINUT
}
}
}
3.程式碼下載:DialogDemo.zipDialogDemo1.zip
本節小結:
好的,本節介紹了三個常用的Dialog,相比起以前的4.x的版本,5.0的這些原生控件, 顯然好看很多~就說這麼多,謝謝~