回答

19

剛剛找到解決方案。我應該導入

import android.support.v7.app.AlertDialog; 

然後AppCompatDialog dialog = builder.create()會工作。

6

android.support.v7.app.AppCompatDialog是直接父級android.support.v7.app.AlertDialog,無論您可以使用android.support.v7.app.AlertDialog,您可以使用android.support.v7.app.AppCompatDialog

15

如果你想用一個AlertDialog,只需導入新supprt v 22.1和使用這樣的代碼(注意進口):

import android.support.v7.app.AlertDialog 

AlertDialog.Builder builder = 
     new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle); 
      builder.setTitle("Dialog"); 
      builder.setMessage("Lorem ipsum dolor ...."); 
      builder.setPositiveButton("OK", null); 
      builder.setNegativeButton("Cancel", null); 
      builder.show(); 

如果

+0

當使用'builder.setView(v)'作爲'appcompatdialog'時,對話框的大小是max,而不是僅包裝組件。這裏'v'是一個'recyclerview',它有變量no。項目 –

+0

我應該怎麼做,以便對話框的大小根據編號改變。 'recyclerview'項目? –

3

我剛搬到全部我的android.app.AlertDialogandroid.support.v7.app.AlertDialog

使用4.X模擬器進行了一些測試後,我發現對於簡單的對話框,只需更改導入即可。但是對於多選對話框,另外,您需要執行AppCompatDialog alert = builder.create();以獲取Material Design樣式對話框(在4.X上)。

需要明確的是,如果你有一個簡單的對話框像這樣的:

import android.support.v7.app.AlertDialog; 

AlertDialog.Builder builder = new AlertDialog.Builder(ctx); 
builder.setIcon(resId) 
.setTitle(title) 
.setMessage(msg) 
.setCancelable(isCalncelable) 
.setPositiveButton(btn1, listener1); 
AlertDialog alert = builder.create(); 
alert.show(); 

改變進口就足夠了:)

但對於多選擇對話框,則需要使用AppCompatDialog像這樣:

import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatDialog; 

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
builder.setTitle("Choose something") 
.setPositiveButton(...) 
.setMultiChoiceItems(mStringArray, mSelectedArray, SomeFragment.this); 
AppCompatDialog alert = builder.create(); 
alert.show(); 

然後你在4.X設備上看到很好的Material Design外觀。

現在有趣的部分!

對於多選擇對話框,一個5.X設備上,本地版本(android.app.AlertDialog)示出了相應的複選框在,正確跟隨Material Design spec。但是如果您使用支持對話框,那麼複選框將出現在右側。 WTF!

從長遠來看,隨着Android 5+獲得市場份額,您將需要切換回本機對話框。