2015-03-20 6 views
7

Ich versuche, ein Beispiel-Code zu finden, die neuen Materialdesign Dialoge fürMaterialdesign Taste

Stacked voller Breite Tasten

jemand mit einem Beispiel-Code helfen mir enter image description here

+0

Siehe diese Seite [Here] (https://github.com/lewisjdeane/L-Dialogs) – Harry

Antwort

4

Ich kann zu implementieren mit diesem ist und es funktioniert gut für mich:

https://github.com/afollestad/material-dialogs

Hier ist eine Demo: https://play.google.com/store/apps/details?id=com.afollestad.materialdialogssample (einschließlich gestapelten Schaltflächen)

+0

Wird es auch abwärtskompatibel sein? – user3722531

+0

Ja: "Eine schöne [...] Dialog-API, mit der Sie Materialdesign-Dialoge für alle Android-Versionen (im Gegensatz zu AppCompat) verwenden können". Ich benutze es nur für Android 4.x und höher, aber es funktioniert auch auf älteren Versionen. –

+0

Gibt es eine Möglichkeit, ohne diese Bibliothek zu importieren? – user3722531

6

Sie, dass bei der Verwendung von nur AppCompat erreichen könnte, meine Abhilfe überprüfen:

-Code Import android.support.v7.app.AlertDialog;

AlertDialog.Builder builder; 
    builder = new AlertDialog.Builder(context, R.style.StackedAlertDialogStyle); 
    builder.setTitle("Title"); 
    builder.setMessage("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc dignissim purus eget gravida mollis. Integer in auctor turpis. Morbi auctor, diam eget vestibulum congue, quam arcu pulvinar dui, blandit egestas erat enim non ligula." + 
      " Nunc quis laoreet libero. Aliquam consectetur nibh eu arcu eleifend efficitur."); 
    builder.setPositiveButton("Positive Button", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     } 
    }); 
    builder.setNeutralButton("Neutral Button", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     } 
    }); 
    builder.setNegativeButton("Cancel Button", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     } 
    }); 
    AlertDialog alertDialog = builder.create(); 
    alertDialog.show(); 
     try{ 
      final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); 
      LinearLayout linearLayout = (LinearLayout) button.getParent(); 
      linearLayout.setOrientation(LinearLayout.VERTICAL); 
     } catch(Exception ex){ 
      //ignore it 
     } 

Stil

<style name="StackedAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="buttonBarButtonStyle">@style/StackedButtonBarButtonStyle</item> 
</style> 

<style name="StackedButtonBarButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> 
    <item name="android:layout_gravity">right</item> 
</style> 

Ergebnis

Stacked Alert Dialog

+1

Das ist keine sehr gute Idee. Erstens gibt es eine Annahme des Layouts des Dialogs, das intern ist und sich ändern könnte. Zweitens zeigt die Implementierung von appCompat, dass alertDialog.getButton NULL zurückgibt, weil die Schaltflächen nur für die Funktion show() gesetzt sind. Bis zu diesem Zeitpunkt beeinflusst diese Logik das Dialoglayout nicht. – rajath

+2

Nicht sehr gut, ist das Android SDK, nicht API bereitstellen Ändern des Alarmdialogs gemäß den Materialrichtlinien.Natürlich kann die interne Implementierung geändert werden, aber wenn Sie die appcompat-Version aktualisieren, müssen Sie überprüfen, ob der Dialog nach der Aktualisierung funktioniert. Dies ist jedoch eine Umgehungsmöglichkeit und könnte Einschränkungen aufweisen. –

+0

Ich benutze appcompat v24.0.0.0, scheint wie es automatisch die Schaltflächen vertikal stapeln, wenn der Text lang ist. – Bruce

1

hier, wie ich in meiner app tue NUR AppCompat Bibliothek Sie kann eine beliebige Anzahl von

Optionen
String[] mOptionsArray = new String[]{"Option 1", "Option 2"}; 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
    builder.setTitle("Cool! title"); 
    builder.setMessage("Cool! message"); 

    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.dialog_list_view, null); 
    ListView listView = (ListView) view.findViewById(R.id.list_view); 
    listView.setAdapter(new ArrayAdapter<>(
      getContext(), 
      R.layout.dialog_list_item, 
      R.id.button, 
      mOptionsArray 
    )); 
    listView.setDivider(null); 
    listView.setOnItemClickListener(mOnItemClickListener); 
    builder.setView(view); 

    return builder.create(); 
} 

dialog_list_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="8dp" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" /> 

dialog_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/button" 
    style="@style/Widget.AppCompat.Button.Borderless.Colored" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@null" 
    android:clickable="false" 
    android:focusable="false" 
    android:gravity="right|center_vertical" 
    android:paddingRight="8dp" 
    android:paddingLeft="8dp" 
    android:text="Button" 
    android:textAllCaps="true" /> 

Ref: http://www.materialdoc.com/flat-button/, https://material.io/guidelines/components/dialogs.html#dialogs-specs, https://material.io/guidelines/components/buttons.html#buttons-style

Dialog with stacked full-width buttons