2015-03-20 9 views
7

Próbuję znaleźć przykładowy kod, aby wprowadzić w życie nowe dialogi projektowania materiałów dlaMateriał projekt przycisk

ułożone przyciski pełnej szerokości

Czy ktoś może mi pomóc z przykładowym kodem enter image description here

+0

Zobacz tę stronę [tutaj] (https://github.com/lewisjdeane/L-Dialogs) – Harry

Odpowiedz

4

I Korzystam z tego i działa świetnie dla mnie:

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

Oto demo: https://play.google.com/store/apps/details?id=com.afollestad.materialdialogssample (łącznie ułożone przyciski)

+0

będzie również kompatybilny wstecz? – user3722531

+0

Tak: "Piękny interfejs API [...] dialogów, umożliwiający korzystanie z dialogów tematycznych w stylu Material Design we wszystkich wersjach Androida (w przeciwieństwie do AppCompat)". Używam go tylko na Androida 4.xi nowszego, ale działa też na starszych wersjach. –

+0

Czy jest sposób, w jaki mógłbym to zrobić bez importowania tej biblioteki? – user3722531

6

Można to osiągnąć z wykorzystaniem TYLKO AppCompat, sprawdź mój obejścia:

Kod 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 
     } 

Style

<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> 

Wynik

Stacked Alert Dialog

+1

To nie jest dobry pomysł. Po pierwsze, istnieje założenie układu dialogowego, które jest wewnętrzne i może się zmieniać. Po drugie, implementacja appCompat pokazuje, że alertDialog.getButton zwraca null, ponieważ przyciski są ustawione tylko w funkcji show(), w którym to czasie ta logika nie wpłynie na układ okna dialogowego – rajath

+2

Niezbyt dobrze, to jest to, że android SDK, nie dostarcza api modyfikować okno dialogowe alertów zgodnie z wytycznymi materiałowymi.Oczywiście wewnętrzna implementacja może zostać zmieniona, ale jeśli zaktualizujesz wersję appcompat, musisz sprawdzić, czy okno dialogowe będzie działało poprawnie po aktualizacji - ale jest to obejście i może mieć ograniczenia. –

+0

Używam appcompat v24.0.0.0, wygląda na to, że automatycznie umieszcza przyciski w pionie, gdy tekst jest długi. – Bruce

1

oto jak robię w mojej aplikacji przy użyciu tylko AppCompat bibliotekę Ty można dowolną liczbę opcji

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