2017-04-20 83 views
8

我不會經常發出警報,但每次我都需要花些時間閱讀documentation並瞭解如何操作。由於我現在不得不這樣做了幾次,我將在下面寫出一個答案,以便我將來可以回來。具體來說,我想比較的基本代碼帶有一個,兩個和三個按鈕的Android警報對話框

  • 一鍵(OK)
  • 兩個按鈕(確定和取消)
  • 三個按鈕(正,負,其他)

會對於這三種常見警報類型的基本代碼可以很方便地在未來進行參考和修改。 This question問如何做一個按鈕。

我在下面添加我的答案。

回答

29

一個鍵

enter image description here

import android.support.v7.app.AlertDialog; 

public class MainActivity extends AppCompatActivity { 

    public void showAlertDialogButtonClicked(View view) { 

     // setup the alert builder 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("My title"); 
     builder.setMessage("This is my message."); 

     // add a button 
     builder.setPositiveButton("OK", null); 

     // create and show the alert dialog 
     AlertDialog dialog = builder.create(); 
     dialog.show(); 
    } 
} 

兩個按鈕

enter image description here

public class MainActivity extends AppCompatActivity { 

    public void showAlertDialogButtonClicked(View view) { 

     // setup the alert builder 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("AlertDialog"); 
     builder.setMessage("Would you like to continue learning how to use Android alerts?"); 

     // add the buttons 
     builder.setPositiveButton("Continue", null); 
     builder.setNegativeButton("Cancel", null); 

     // create and show the alert dialog 
     AlertDialog dialog = builder.create(); 
     dialog.show(); 
    } 
} 

三個按鈕

enter image description here

public class MainActivity extends AppCompatActivity { 

    public void showAlertDialogButtonClicked(View view) { 

     // setup the alert builder 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Notice"); 
     builder.setMessage("Launching this missile will destroy the entire universe. Is this what you intended to do?"); 

     // add the buttons 
     builder.setPositiveButton("Launch missile", null); 
     builder.setNeutralButton("Remind me later", null); 
     builder.setNegativeButton("Cancel", null); 

     // create and show the alert dialog 
     AlertDialog dialog = builder.create(); 
     dialog.show(); 
    } 
} 

如果按鈕文本太長,以適應所有的水平,那麼它會自動獲得的三個按鈕垂直列布局。

enter image description here

處理按鈕點擊

OnClickListener是在上述實施例null。您可以用監聽器替換null,以便在用戶點擊按鈕時執行某些操作。例如:

builder.setPositiveButton("Launch missile", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 

     // do something like... 
     launchMissile(); 
    } 
}); 

回事

還有更多品種的對話框,你可以做的。請參閱documentation尋求幫助。

由於在AlertDialog中只支持三個按鈕,下面是帶有列表的對話框的示例。

enter image description here

public class MainActivity extends AppCompatActivity { 

    public void showAlertDialogButtonClicked(View view) { 

     // setup the alert builder 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Choose an animal"); 

     // add a list 
     String[] animals = {"horse", "cow", "camel", "sheep", "goat"}; 
     builder.setItems(animals, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       switch (which) { 
        case 0: // horse 
        case 1: // cow 
        case 2: // camel 
        case 3: // sheep 
        case 4: // goat 
       } 
      } 
     }); 

     // create and show the alert dialog 
     AlertDialog dialog = builder.create(); 
     dialog.show(); 
    } 
} 

用於無線電按鈕列表和複選框列表的類似的例子見this answer

  • 使用字符串資源,而不是硬編碼的字符串。
  • 您可以將所有內容都包裝在擴展DialogFragment的類中,以便輕鬆重用對話框。 (參見this尋求幫助。)
  • 這些實施例,以API 11使用的載體庫,支持版本之前所以進口應該是

    import android.support.v7.app.AlertDialog; 
    
  • 我在上面爲了簡潔的例子省略onCreate方法。那裏沒有什麼特別的。

+0

哪種觀點,我需要傳遞給對話框看到了嗎? –

+0

@Eduardo Lion,我假設你指的是'showAlertDialogBu​​ttonClicked(View view)'中的'view'。這只是按鈕的onClick()方法中的按鈕。你可以忽略它。該對話框根本不使用它。該對話只需要Context,在這種情況下是'this',即Activity。 – Suragch

相關問題