Odpowiedz

19

Właśnie znalazłem rozwiązanie. Należy zaimportować:

import android.support.v7.app.AlertDialog; 

, a następnie AppCompatDialog dialog = builder.create() będzie działać.

6

android.support.v7.app.AppCompatDialog to bezpośrednia klasa nadrzędna android.support.v7.app.AlertDialog, gdzie można użyć android.support.v7.app.AlertDialog, można użyć android.support.v7.app.AppCompatDialog.

15

Jeśli chcesz użyć AlertDialog, po prostu zaimportować nową supprt v 22.1 i użyć kodu jak poniżej (należy zwrócić uwagę na import):

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(); 

Jeśli

+0

przy użyciu 'builder.setView (v)' dla 'appcompatdialog' wielkość okna dialogowego to max zamiast tylko zawijania komponentu. tutaj 'v' jest' recyclerview', który ma zmienną nie. elementów –

+0

co powinienem zrobić, aby rozmiar okna zmieniał się zgodnie z nr. elementów 'recyclerview'? –

3

Właśnie wszedł all mój android.app.AlertDialog do android.support.v7.app.AlertDialog.

Po kilku testach z emulatorami 4.X stwierdziłem, że dla prostego okna wystarczy zmienić import. Ale w przypadku dialogów wielokrotnego wyboru należy dodatkowo wykonać AppCompatDialog alert = builder.create();, aby uzyskać okna dialogowe Material Design (w wersji 4.X).

Żeby było jasne, czy masz prosty dialog jak ten:

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(); 

Zmiana import wystarczy :)

Ale dla dialogowym wielo wybór, trzeba użyć AppCompatDialog w ten sposób:

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(); 

Otrzymasz ładny wygląd Material Design na urządzeniach 4.X.

Teraz zabawa!

Przez okna wyboru wielu, na urządzeniu 5.x wersja natywna (android.app.AlertDialog) pokazuje pól wyboru w lewo, poprawnie po Material Design spec. Ale jeśli korzystasz z okien dialogowych pomocy technicznej, pola wyboru będą wyświetlane pod numerem z prawej strony. WTF!

W dłuższej perspektywie, gdy Android 5+ zyska udział w rynku, trzeba będzie wrócić do rodzimych okien dialogowych.