2013-05-14 50 views
0

我嘗試使警報對話框的自定義樣式,將工作acros 2.2到4.2版本。我發現的最佳方法是使用如何自定義所有版本的AlertDialog風格?

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom)); 

但是,它可以從API 11中使用,但不適用於早於此版本的版本。您能否建議以自定義樣式實現警報對話的無痛方式?謝謝。

回答

0

你可以使用Android的支持 - v4.jar(你可以看到從here這個庫)

在libs文件夾添加此庫,並將其添加到構建路徑

現在,創建對話框,

現在轉換由FragmentActivity擴展您的活動(它需要什麼,這僅僅是一個子類活動的)

現在,你必須創建一個靜態的活動中,如:

public static class ReportNameFragment extends DialogFragment { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle(R.string.enter_report_name); 

     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View view = inflater.inflate(R.layout.enter_report_dialog, null); 
     final EditText reportName = (EditText) view 
       .findViewById(R.id.report_name); 
     builder.setView(view) 
       // Add action buttons 
       .setPositiveButton(R.string.save, 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, 
            int id) { 
           //Positive Button task 

          } 
         }) 
       .setNegativeButton(R.string.cancel, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int id) { 
           ReportNameFragment.this.getDialog() 
             .cancel(); 
          } 
         }); 
     return builder.create(); 
    } 
} 

和呼叫此對話框在您的活動的任何地方通過寫:

DialogFragment reportNameFragment = new ReportNameFragment(); 
      reportNameFragment.show(getSupportFragmentManager(), 
        "reportNameTypePicker"); 

如果您想了解更多關於對話框,你可以去here ...

0

我不知道無痛的,但在這裏的是,在我的經驗運作方式:

1)創建一個自定義視圖或佈局,並通過builder.setView(視圖)設置你的建設者。 2)如果你有AlertDialog按鈕 - 那些按鈕不是你自定義視圖的一部分,它們會爲DialogInterface.OnClickListener而不是View.OnClickListener激發事件。所以,如果你需要他們的風格,你必須創建你的實際警報時動態地做到這一點,像這樣:

alert = builder.create(); 
    alert.setOnShowListener(new DialogInterface.OnShowListener() 
    { 
     @Override 
     public void onShow(DialogInterface dialog) 
     { 
      Button btnPositive = alert.getButton(Dialog.BUTTON_POSITIVE); 
      // set custom stuff for your positive button 

      Button btnNegative = alert.getButton(Dialog.BUTTON_NEGATIVE); 
      // set custom stuff for your negative button 
     } 
    }); 

這不是最完美的解決方案,但到目前爲止,我還沒有發現其他任何作品,以及對於分鐘API級別8