android的對話方塊

來源:互聯網
上載者:User

android的提醒
  android 的提醒主要有3中方式:Toast Notification,Status Bar Notification,Dialog Notification;在Standup Timer 中使用了很多Dialog notification。特別是在刪除某項時,彈出的確認對話方塊。Dialog Notification 主要分為四種:Alert Dialog,ProgressDialog ,DatePickerDialog ,TimePickerDialog。本文將重點講述Alert Dialog。

Alert Dialog
  Alert Dialog的建立比較簡單,我們將按步驟來建立一個帶有EditText view的警告對話方塊,通過該對話方塊建立Standup timer中參加會議的團隊。
  第一步,重寫 onCreateDialog方法,根據ID建立不同的對話方塊。
[java]
@Override 
    protected Dialog onCreateDialog(int id) 
    { 
        switch(id) 
        { 
        case  CREATE_TEAM_DIALOG: 
              if (createTeamDialog ==null)  
              { 
                  AlertDialog.Builder builder=new AlertDialog.Builder(this); 
                  builder.setTitle(R.string.add_team); 
                  builder.setView(getTextEntryView()); 
                  builder.setCancelable(true); 
                  //設定確定按鈕和監聽其事件  
                  builder.setPositiveButton(R.string .ok, addTeamButtonListener()); 
                  //設定否定按鈕和監聽其事件  
                  builder.setNegativeButton(R.string.revert, cancelListener()); 
                  createTeamDialog = builder.create(); 
                   
              } 
              return createTeamDialog; 
         default: 
                Logger.e("Attempting to create an unkonwn dialog with an id of "+ id); 
                returnnull; 
        } 
    } 

@Override
    protected Dialog onCreateDialog(int id)
    {
        switch(id)
        {
        case  CREATE_TEAM_DIALOG:
              if (createTeamDialog ==null)
              {
                  AlertDialog.Builder builder=new AlertDialog.Builder(this);
                  builder.setTitle(R.string.add_team);
                  builder.setView(getTextEntryView());
                  builder.setCancelable(true);
                  //設定確定按鈕和監聽其事件
                  builder.setPositiveButton(R.string .ok, addTeamButtonListener());
                  //設定否定按鈕和監聽其事件
                  builder.setNegativeButton(R.string.revert, cancelListener());
                  createTeamDialog = builder.create();
                 
              }
              return createTeamDialog;
         default:
                Logger.e("Attempting to create an unkonwn dialog with an id of "+ id);
                returnnull;
        }
    }AlertDialog.Builder 是用來建立具體警告對話方塊的。
     setTitle()為設定對話方塊的標題;
     setView(View)用於給對話方塊載入View,如果需要的話,這裡載入的是一個EditText。
     setCancelable(boolean) 設定返回鍵是否能撤銷對話方塊,一般為true
    setPositiveButton()設定按下表示確定按鈕時按鈕的text,和按鈕的事件監聽器
    setNegativeButton()設定取消按鈕的text 和監聽器
  另外如果對話方塊不需要特別的視圖控制項的話可以不使用setView()。直接通過 setMessage(Msg)來顯示你需要的展示的警告資訊。
Builder各項屬性設定完成後,即可通過builder.create(),建立AlertDialog對話方塊。
 
第二步展示對話方塊
  展示對話方塊非常簡單,在你需要彈出提醒的操作裡加入showDialog(id) 即可。通常根據id對對話方塊進行封裝。
[java]
privatevoid displayAddTeamDialog() { 
showDialog(CREATE_TEAM_DIALOG); 
 

privatevoid displayAddTeamDialog() {
showDialog(CREATE_TEAM_DIALOG);

}第三步編寫對話方塊中按鈕事件
  這與普通按鈕的事件編寫相似,這裡按鈕的事件處理的是添加一個團隊操作。

[java]
private OnClickListener addTeamButtonListener() { 
         
          returnnew DialogInterface.OnClickListener() { 
                publicvoid onClick(DialogInterface dialog, int id) { 
                    EditText collectedTextView = (EditText) getTextEntryView().findViewById(R.id.collected_text); 
                    String name = collectedTextView.getText().toString(); 
                    Team.create(name, TeamListActivity.this); 
                    teamListAdapter.add(name); 
                } 
            }; 
    } 

private OnClickListener addTeamButtonListener() {
       
          returnnew DialogInterface.OnClickListener() {
                publicvoid onClick(DialogInterface dialog, int id) {
                    EditText collectedTextView = (EditText) getTextEntryView().findViewById(R.id.collected_text);
                    String name = collectedTextView.getText().toString();
                    Team.create(name, TeamListActivity.this);
                    teamListAdapter.add(name);
                }
            };
    }返回的是 DialogInterface 下的 OnClickListener。
[java]
private OnClickListener cancelListener() { 
         
        returnnew DialogInterface.OnClickListener() { 
             
            @Override 
            publicvoid onClick(DialogInterface dialog, int which) { 
                dialog.cancel(); 
                 
            } 
        }; 
    } 

private OnClickListener cancelListener() {
       
        returnnew DialogInterface.OnClickListener() {
           
            @Override
            publicvoid onClick(DialogInterface dialog, int which) {
                dialog.cancel();
               
            }
        };
    }撤銷對話方塊操作,撤出警告。
 
關於setView
  代碼中有幾處調用了getTextEntryView方法,這是一個返回View的自訂方法。setView(View) 可以讓展現你想要的View,用來接收使用者的輸入資訊等。
[java]
synchronizedprotected View getTextEntryView() { 
         if (txtEntryView ==null) { 
                LayoutInflater factory = LayoutInflater.from(this); 
                txtEntryView = factory.inflate(R.layout.collect_text, null); 
            } 
            return txtEntryView; 
         
    } 

synchronizedprotected View getTextEntryView() {
         if (txtEntryView ==null) {
                LayoutInflater factory = LayoutInflater.from(this);
                txtEntryView = factory.inflate(R.layout.collect_text, null);
            }
            return txtEntryView;
       
    }LayoutInflater 可以將res 檔案夾下的layout 布局的XML 轉化為 View。也可以通過 getLayoutInflater() 或 getSystemService(String) 方法建立LayoutInflater
[java]
LayoutInflater inflater = (LayoutInflater)context.getSystemService 
Context.LAYOUT_INFLATER_SERVICE); 

LayoutInflater inflater = (LayoutInflater)context.getSystemService
Context.LAYOUT_INFLATER_SERVICE);inflate(int resId,ViewGroup root),將預先定義的XML布局檔案轉化為View
[html]
<?xml version="1.0" encoding="utf-8"?> 
 
<EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/collected_text" 
android:layout_width="fill_parent" android:layout_height="fill_parent"  
android:padding="5dp"/> 

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

<EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/collected_text"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:padding="5dp"/>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.