Alertdialog в материальном дизайне

я просто следую этому http://www.laurivan.com/make-dialogs-obey-your-material-theme/, чтобы оформить мой диалог предупреждений в стиле материального дизайна. Однако я обнаружил, что я все еще не могу стилизовать так же, как этот сайт, вот мой код и снимок экрана:

значения-v14/styles.xml:

<!--
    Base application theme for API 14+. This theme completely replaces
    AppBaseTheme from BOTH res/values/styles.xml and
    res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
</style>

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowActionBarOverlay">true</item>  
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/colorPrimary</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>

    <item name="android:dialogTheme">@style/MyDialogTheme</item>
    <item name="android:alertDialogTheme">@style/MyDialogTheme</item>
</style>

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowCloseOnTouchOutside">false</item>
</style>

значения/color.xml

<resources>
    <color name="colorPrimaryDark">#3367d6</color>
    <color name="colorPrimary">#4285f4</color>
    <color name="windowBackgroundColor">#eeeeee</color>
    <color name = "transparent">#0000</color>
</resources>

снимок экрана: введите здесь описание изображения

Я хочу, чтобы разделитель был удален, а btn был в правильном стиле, спасибо!


person Huang Liang-Syun    schedule 23.04.2015    source источник
comment
Используйте эту библиотеку github.com/afollestad/material-dialogs.   -  person NarenderNishad    schedule 23.04.2015
comment
У меня была та же проблема... Я думаю, что у вас нет правильного импортированного AlertDialog... проверьте его, если он из пакета android.support.v4.app.DialogFragment.   -  person box    schedule 04.06.2015


Ответы (2)


С новым AppCompat v22.1 вы можете использовать новый android.support.v7.app.AlertDialog.

Просто используйте такой код:

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

И используйте такой стиль:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">#FFCC00</item>
        <item name="android:textColorPrimary">#FFFFFF</item>
        <item name="android:background">#5fa3d0</item>
    </style>

Вы можете использовать один файл стиля для всех устройств.

person Gabriele Mariotti    schedule 23.04.2015
comment
на самом деле, я пробовал ваш ответ до того, как задал этот вопрос, но он все еще не работает. AlertDialog станет стилем материала + оригинальным стилем - person Huang Liang-Syun; 23.04.2015
comment
скриншот: drive.google.com/ - person Huang Liang-Syun; 23.04.2015
comment
Используете ли вы единый стиль для всех устройств? Или вы переопределяете стиль в v-14? Ссылка не публичная. Проверить авторизацию - person Gabriele Mariotti; 23.04.2015
comment
Ссылка теперь исправлена, и я использую единый стиль для всех - person Huang Liang-Syun; 23.04.2015
comment
работает удивительно без необходимости этих расширений github - person Piyush-Ask Any Difference; 12.09.2015

Лучшее решение, которое я нашел для стилизации диалогового окна, - это включить свойства в ваш файл styles.xml, как у вас, а также установить прозрачный цвет (в colors.xml), обязательно включив полный #AARRGGBB:

<color name="transparent">#00000000</color>

Затем также обязательно добавьте тему в макет диалогового окна:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme">
        <TextView
            android:id="@+id/dialog_info"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginLeft="4dp"
            android:layout_marginRight="4dp"
            android:layout_marginBottom="4dp"
            android:text="Dialog Text"/>
    </LinearLayout>

Примечание: вы должны установить в качестве родителя "MyDialogTheme" (в вашем примере) родителя "Theme.AppCompat.Light.Dialog"

Следуя разделу «Передача событий обратно на узел диалога» в руководстве для разработчиков здесь: Ссылка

убедитесь, что вы переопределили как onAttach(), так и onCreateDialog() в классе вашего фрагмента диалога.

обратите внимание, что вам «не нужно» расширять основную активность FragmentActivity, вы можете расширить AppCompatActivity и по-прежнему включать в класс активности библиотеку (для API 11+):

android.app.DialogFragment вместо android.support.v4.app.DialogFragment

Хотя на вашем снимке экрана показано диалоговое окно выбора даты, приведенное выше работает для простых (и наиболее часто используемых) предупреждений и/или диалоговых окон. В приведенной выше ссылке на документацию они предоставляют дополнительную информацию о средствах выбора даты и времени.

person tsw    schedule 27.07.2015