材质设计没有样式警报对话框

我已经将 appCompat 的材质设计添加到我的应用程序中,看起来提醒对话框并没有使用我的原色、原色、深色或者重音色。

以下是我的基本风格:

<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/apptheme_color</item>
<item name="colorPrimaryDark">@color/apptheme_color_dark</item>
<item name="colorAccent">@color/apptheme_color</item>
<item name="android:textColorPrimary">@color/action_bar_gray</item>
</style>

根据我的理解,对话框的按钮文本也应该使用这些颜色。是我理解错了,还是我还有别的事要做?


解决方案:

有标记的答案使我走上了正确的道路。

<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/apptheme_color</item>
<item name="colorPrimaryDark">@color/apptheme_color_dark</item>
<item name="colorAccent">@color/apptheme_color</item>
<item name="android:actionModeBackground">@color/apptheme_color_dark</item>
<item name="android:textColorPrimary">@color/action_bar_gray</item>
<item name="sdlDialogStyle">@style/DialogStyleLight</item>
<item name="android:seekBarStyle">@style/SeekBarNavyTheme</item>
</style>


<style name="StyledDialog" parent="Theme.AppCompat.Light.Dialog">
<item name="colorPrimary">@color/apptheme_color</item>
<item name="colorPrimaryDark">@color/apptheme_color_dark</item>
<item name="colorAccent">@color/apptheme_color</item>
</style>
104257 次浏览

AppCompat 不会对对话框这么做(至少现在不会)

编辑: 现在是这样。请确保使用 android.support.v7.app.AlertDialog

你可以考虑这个项目: Https://github.com/fengdai/alertdialogpro

它可以提供你的材料主题警报对话框几乎相同的棒棒糖。兼容 Android 2.1。

试试这个库:

Https://github.com/avast/android-styled-dialogs

它基于 DialogFragments而不是 AlertDialogs(就像@afollestad 中的那个)。主要优点: 对话框在旋转之后不会消失,回调仍然可以工作。

你可以用

材料设计图书馆

材料设计库 为漂亮的 提示对话框,按钮,和其他东西,如 小吃店。 < em > 目前它是深度开发。

指南,代码,例子 -https://github.com/navasmdc/MaterialDesignLibrary

指导如何将库添加到 Android Studio 1.0-如何将材料设计库导入到 Android Studio?

.

编程愉快;)

在初始化对话框构建器时,传递第二个参数作为主题。它将自动显示 API 级别为21的材料设计。

AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);

或者,

AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);

由于某些原因,android: textColor 似乎只更新标题颜色。 可以使用

SpannableString.AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.MyDialogTheme));


AlertDialog dialog = builder.create();
Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
dialog.setMessage(wordtoSpan);
dialog.show();

2019年8月更新 Android 库的材质组件:

使用新的 Android 库的材料组件,您可以使用新的 com.google.android.material.dialog.MaterialAlertDialogBuilder类,它扩展了现有的 androidx.appcompat.AlertDialog.Builder类,并提供了对最新材料设计规范的支持。

就像这样:

new MaterialAlertDialogBuilder(context)
.setTitle("Dialog")
.setMessage("Lorem ipsum dolor ....")
.setPositiveButton("Ok", /* listener = */ null)
.setNegativeButton("Cancel", /* listener = */ null)
.show();

你可以自定义扩展 ThemeOverlay.MaterialComponents.MaterialAlertDialog风格的颜色:

  <style name="CustomMaterialDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<!-- Background Color-->
<item name="android:background">#006db3</item>
<!-- Text Color for title and message -->
<item name="colorOnSurface">@color/secondaryColor</item>
<!-- Text Color for buttons -->
<item name="colorPrimary">@color/white</item>
....
</style>

要应用自定义样式 ,只需使用构造函数:

new MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog)

enter image description here

自定义按钮、标题和正文文本 看看这个帖子了解更多细节。

你也可以在你的应用程序主题中改变 全球范围内的样式:

 <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
...
<item name="materialAlertDialogTheme">@style/CustomMaterialDialog</item>
</style>

与支援图书馆及应用程式主题:

使用新的 AppCompat v22.1,你可以使用新的 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>

否则,您可以在当前主题中定义:

<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- your style -->
<item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
</style>

然后在你的代码中:

 import android.support.v7.app.AlertDialog


AlertDialog.Builder builder =
new AlertDialog.Builder(this);

以下是 Kitkat 上的 AlertDialog: enter image description here

材质设计风格警示对话框: 自定义字体,按钮,颜色和形状,。

 MaterialAlertDialogBuilder(requireContext(),
R.style.MyAlertDialogTheme
)
.setIcon(R.drawable.ic_dialogs_24px)
.setTitle("Feedback")
//.setView(R.layout.edit_text)
.setMessage("Do you have any additional comments?")
.setPositiveButton("Send") { dialog, _ ->


val input =
(dialog as AlertDialog).findViewById<TextView>(
android.R.id.text1
)
Toast.makeText(context, input!!.text, Toast.LENGTH_LONG).show()


}
.setNegativeButton("Cancel") { _, _ ->
Toast.makeText(requireContext(), "Clicked cancel", Toast.LENGTH_SHORT).show()
}
.show()

风格:

  <style name="MyAlertDialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
  

<item name="android:textAppearanceSmall">@style/MyTextAppearance</item>
<item name="android:textAppearanceMedium">@style/MyTextAppearance</item>
<item name="android:textAppearanceLarge">@style/MyTextAppearance</item>


<item name="buttonBarPositiveButtonStyle">@style/Alert.Button.Positive</item>
<item name="buttonBarNegativeButtonStyle">@style/Alert.Button.Neutral</item>
<item name="buttonBarNeutralButtonStyle">@style/Alert.Button.Neutral</item>


<item name="android:backgroundDimEnabled">true</item>


<item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MyApp.Dialog.Rounded
</item>


</style>








<style name="MyTextAppearance" parent="TextAppearance.AppCompat">
<item name="android:fontFamily">@font/rosarivo</item>
</style>




<style name="Alert.Button.Positive" parent="Widget.MaterialComponents.Button.TextButton">
<!--     <item name="backgroundTint">@color/colorPrimaryDark</item>-->
<item name="backgroundTint">@android:color/transparent</item>
<item name="rippleColor">@color/colorAccent</item>
<item name="android:textColor">@color/colorPrimary</item>
<!-- <item name="android:textColor">@android:color/white</item>-->
<item name="android:textSize">14sp</item>
<item name="android:textAllCaps">false</item>
</style>




<style name="Alert.Button.Neutral" parent="Widget.MaterialComponents.Button.TextButton">
<item name="backgroundTint">@android:color/transparent</item>
<item name="rippleColor">@color/colorAccent</item>
<item name="android:textColor">@color/colorPrimary</item>
<!--<item name="android:textColor">@android:color/darker_gray</item>-->
<item name="android:textSize">14sp</item>
<item name="android:textAllCaps">false</item>
</style>




<style name="ShapeAppearanceOverlay.MyApp.Dialog.Rounded" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">8dp</item>
</style>

产出: enter image description here