2012-07-12 48 views
17

爲什麼我想這樣做完全是另一次討論,但我需要弄清楚讓所有警報對話框右邊都有肯定按鈕的最佳方法。請注意,在3.0及以下版本中,按鈕通常顯示爲確定/取消,在4.0及更高版本中,取消/確定。我想強制我的應用程序以最簡單的方式使用取消/確定。我在應用程序中有很多AlertDialogs。如何在AlertDialog中設置正負按鈕的順序?

+3

我建議你不要這樣做。如果用戶將他們的大部分應用都顯示爲「確定/取消」,但在一個應用中將其設爲「取消/確定」,會令人困惑。我認爲最好保持一致。 – kabuko 2012-07-12 20:26:57

+5

請參閱上面的內容:「爲什麼我要這麼做是另一個完全討論的問題」 – 2012-07-13 03:16:45

回答

16

不幸的是,我不相信你可以。但是,引用documentation

注意:您只能將每個按鈕類型之一添加到AlertDialog。也就是說,你不能有多個「正面」按鈕。這將可能的按鈕數量限制爲三個:正面,中性和負面。這些名稱在技術上與您的按鈕的實際功能無關,但應該可以幫助您跟蹤哪一個按鈕的功能。

所以你可以把不同的按鈕變成任何你想要的。你現在看到的是具有交換的順序(從this答案排序):

  • 在之前的ICS設備,按鈕順序(從左到右)是積極的 - 中性 - 負。
  • 在使用ICS的較新設備上,按鈕順序(從左到右)現在爲NEGATIVE - NURTRAL - POSITIVE。

你可以嘗試檢查Build.VERSION並用它來決定哪個按鈕是在運行時。

+1

這很有幫助,但似乎4.0和更高版本的許多手機仍然沒有按鈕順序顛倒。我可以告訴的是,如果構建版本> = 4.0,那麼按鈕訂單可能取消/確定 – 2012-07-26 13:59:30

+3

在4.0.3基於按鈕文本的負面/正面變化的順序 – max4ever 2013-01-11 11:13:36

+2

我看到一個「中性」 - 「負面」 - 警報對話框和支持警報對話框中的從左到右的「正」順序。他們是否改變了主意? – 2016-01-31 23:33:46

1

我已經創建了一個解決方案來強制任何設備上的任何Android版本的按鈕順序。

這個想法是,我們可以得到對話框的按鈕列表,以便它們出現在屏幕上,並按照我們的需要設置文本和動作。它保證我們在任何設備上都有相同的訂單。

請檢查創建和顯示對話框我GitHub repository

這裏是例子:

new FixedOrderDialogFragment.Builder() 
    .setLeftButtonText(R.string.left) 
    .setCenterButtonText(R.string.center) 
    .setRightButtonText(R.string.right) 
    .setDefaultButton(FixedOrderDialogFragment.BUTTON_RIGHT) 
    .setMessage(R.string.message) 
    .setTitle(R.string.app_name) 
    .create() 
.show(getSupportFragmentManager(), "DEMO"); 

請注意,車主活動應該實現FixedOrderDialogFragment.FixedOrderDialogListener能夠在活動的再創造恢復對話狀態。

0

我想我可以將正面按鈕的文本設置爲取消,將負面設置爲確定,但事實證明它們按字母順序排列。

4

您可以擴展AlertDialog.Builder強制命令:

public class MyDialog extends AlertDialog.Builder { 

    public MyDialog(Context arg0) { 
     super(arg0); 
    } 

    @Override 
    public Builder setPositiveButton(CharSequence text, OnClickListener listener) { 
     if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
      return super.setNegativeButton(text, listener); 
     } else { 
      return super.setPositiveButton(text, listener); 
     } 

    } 

    @Override 
    public Builder setNegativeButton(CharSequence text, OnClickListener listener) { 
     if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
      return super.setPositiveButton(text, listener); 
     } else { 
      return super.setNegativeButton(text, listener); 
     } 
    } 

} 
+1

查看之前的評論:「似乎4.0以上的手機仍然沒有按鍵順序顛倒。我只能說如果構建版本> = 4.0,那麼按鈕順序可能會取消/確定」 – 2013-12-03 16:41:25

7

這是我的解決方案。這對我來說很有用。

// Show alertDialog after building 
    AlertDialog alertDialog = createAlertDialog(context); 
    alertDialog.show(); 
    // and find positiveButton and negativeButton 
    Button positiveButton = (Button) alertDialog.findViewById(android.R.id.button1); 
    Button negativeButton = (Button) alertDialog.findViewById(android.R.id.button2); 
    // then get their parent ViewGroup 
    ViewGroup buttonPanelContainer = (ViewGroup) positiveButton.getParent(); 
    int positiveButtonIndex = buttonPanelContainer.indexOfChild(positiveButton); 
    int negativeButtonIndex = buttonPanelContainer.indexOfChild(negativeButton); 
    if (positiveButtonIndex < negativeButtonIndex) { 
     // prepare exchange their index in ViewGroup 
     buttonPanelContainer.removeView(positiveButton); 
     buttonPanelContainer.removeView(negativeButton); 
     buttonPanelContainer.addView(negativeButton, positiveButtonIndex); 
     buttonPanelContainer.addView(positiveButton, negativeButtonIndex); 
    } 
+0

這是否適用於pre 3.0設備? – jagmohan 2014-11-22 10:48:53

+0

是的,它是在API8(2.2)版本的Android模擬器上工作的。 – 2014-11-23 08:13:14

+0

它正在工作,我認爲這應該是被接受的答案。謝謝! – jagmohan 2014-11-23 08:41:53

0
  • 在AlertDialog buttonPanel,三個按鈕排序[中性] [負] [正]
  • 那麼你可以設置按鈕,像下面的代碼

    建設者。setNeutralButton( 「負」,聽者);

    builder.setNegativeButton(「Neutral」,listener);

    builder.setPositiveButton(「Positive」,listener);

相關問題