Android對話方塊使用詳解(二),android使用詳解
部落格地址:http://blog.csdn.net/u012637501/article/details/46003413
一、使用PopupWindow建立對話方塊風格的視窗 使用PopupWindow建立對話方塊風格的視窗步驟如下: >調用PopupWindow的構造器建立PopupWindow對象; >調用PopupWindow的showAsDropDown(View v)將PopupWindow作為v組件的下拉組件顯示出來;或調用PopupWindow的showAtLocation()方法將PopupWindow在指定位置顯示出來。 >調用PopupWindow的dismiss()方法取消顯示popup視窗;(1)對話方塊樣式
(2)代碼實現
- View view = getLayoutInflater().inflate(R.layout.dialog, null); //裝載R.layout.popup對應的介面布局
- final PopupWindow popup = new PopupWindow(view, 500, 300); //指定布局資源,視窗高度、長度
- // popup.showAsDropDown(view); //以下拉方式顯示
- popup.showAtLocation(findViewById(R.id.dialogBtn), Gravity.CENTER, 100, 100);
- popup.dismiss();
註:R.layout.dialog.xml只包含一個ImageVIew和Button組件
二、使用DatePickDialog、TimePickerDialog對話方塊 使用DataPickDialog、TimePickerDialog建立日期時間對話方塊,主要步驟如下: >通過new關鍵字建立DatePickerDialog、TimePickerDialog執行個體,調用它們的show()方法顯示日期選擇對話方塊和時間選擇對話方塊; >為DatePickerDialog、TimePickerDialog綁定監聽器,通過設定事件觸發監聽器,擷取使用者佈建的事件 其中 DatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) TimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)
1.對話方塊樣式
2.代碼實現
- Calendar calendar = Calendar.getInstance();
- new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
- public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
- Toast.makeText(MainActivity.this, "你選擇的日期為:"+year+":"+monthOfYear+":"
- +dayOfMonth, Toast.LENGTH_SHORT).show();
- }
- }
- //初始化日期
- , calendar.get(Calendar.YEAR)
- , calendar.get(Calendar.MONTH)
- , calendar.get(Calendar.DAY_OF_MONTH)).show();
- /************************************************************************/
- Calendar calendar = Calendar.getInstance();
- new TimePickerDialog(MainActivity.this, new OnTimeSetListener() {
- public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
- Toast.makeText(MainActivity.this, "你選擇的時間為:"+hourOfDay+":"+minute, Toast.LENGTH_SHORT).show();
- }
- }
- //初始化時間
- , calendar.get(Calendar.HOUR_OF_DAY)
- , calendar.get(Calendar.MINUTE),
- //true表示採用24小時制
- true).show();
三、使用ProgressDialog建立進度條對話方塊
使用ProgressDialog建立進度對話方塊主要有兩種方式: >如果只是建立簡單的進度對話方塊,調用ProgressDialog提供的靜態show()方法顯示對話方塊即可; ProgressDialog progressDialog = ProgressDialog.show( LoginActivity.this, "", "正在登入,請稍後....."); progressDialog.dismiss(); //取消進度條對話方塊 >建立ProgeressDialog,然後調用方法對話方塊裡的進度條進行設定,設定完成後將對話方塊顯示處理,ProgressDialog包含以下常用方法: setIndeteminate(boolean indeteminate):設定對話方塊裡的進度條不顯示進度值; setMax(int max):設定對話方塊裡進度條的最大值; setMax(int max):設定對話方塊裡進度條的最大值; setMessage(CharSequence message):設定對話方塊裡顯示的訊息 setProgress(int value):設定對話方塊裡進度條的進度值 setProgressStyle(int style):設定對話方塊裡進度條的風格
1.對話方塊樣式
2.代碼實現
- public class MainActivity extends Activity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //進度條
- ProgressDialog progressDialog = null;
- final static int MAX_PROGRESS = 100;
- private int[] data = new int[60];
- int progressStatus = 0;
- int hasData = 0;
- }
-
- /**
- * 定義一個負責更新進度條的Handler
- * */
- Handler handler = new Handler(){
- public void handleMessage(Message msg) {
- if(msg.what == 0x110){
- progressDialog.setProgress(progressStatus);
- }
- };
- };
- public void dialogBtn(View v){
- /**
- * 建立一個進度條對話方塊
- * */
- progressDialog = new ProgressDialog(this); //執行個體化一個ProgressDialog對象
- progressDialog.setTitle("任務進行中");
- progressDialog.setMessage("任務正在執行中,請稍後");
- progressDialog.setCancelable(false); //設定對話方塊能夠觸屏關閉
- progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //設定對話方塊的進度條風格
- progressDialog.setIndeterminate(false); //設定對話方塊的進度條是否顯示進度
- progressDialog.show(); //顯示對話方塊
- /**
- * 建立一個子線程,定時發送訊息給Handler
- * */
- new Thread(new Runnable(){
- public void run() {
- while(progressStatus < MAX_PROGRESS){
- progressStatus = MAX_PROGRESS*doWork()/data.length; //擷取耗時操作的完成百分比
- handler.sendEmptyMessage(0x110);
- }
- if(progressStatus >= MAX_PROGRESS){ //任務完成,退出對話方塊
- progressDialog.dismiss();
- }
- }
- }).start();
- }
- /**
- * 類比一個耗時的操作
- * */
- protected int doWork() {
- data[hasData++] = (int)(Math.random()*100);
- try{
- Thread.sleep(500); //0.5s更新一次
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- return hasData;
- }
- }
注意:int[] data = new int[60];是因為當數組大小為50時,在耗時操作模組累加出現數組下標越界錯誤。 java.lang.ArrayIndexOutOfBoundsException: length=50; index=50