使用XML在警报对话框中设置消息文本外观(Android API Level 23)

时间:2016-07-24 06:19:15

标签: android xml alertdialog

我试图在警告对话框中设置邮件的文本大小,但在多次尝试后无法进行。另一方面,标题和按钮文本大小可以同时由主题的字体大小控制(在下面的示例中设置为14sp)。

使用以下XML样式描述创建警报对话框,遵循this blog中描述的方法:

<style name="MyAlertDialogTheme" parent="@android:style/Theme.Holo.Dialog.NoActionBar">
    <item name="colorAccent">#ffffff</item>

    <!--This controls size of button & title text-->
    <item name="android:textSize">14sp</item>

    <item name="android:textAppearanceMedium">@style/MyMsgTextAppearance</item>
</style>
<style name="MyMsgTextAppearance" parent="@android:style/TextAppearance.Holo.Medium">
    <item name="android:textSize">22sp</item>
    <item name="android:textStyle">italic</item>
</style>

使用以下代码在运行时调用主题:

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogTheme);
builder.setCancelable(false);
builder.setTitle("Remove contact");
builder.setMessage("Are you sure you want to delete this contact ?");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);

AlertDialog dialog = builder.create();
dialog.show();

这是我得到的: Alert dialog screenshot

显然,消息文本大小远小于22sp。但是,我可以在运行时调整字体大小:

dialog.show();

TextView tv = (TextView) dialog.findViewById(android.R.id.message);
if(tv != null)
    tv.setTextSize(22.0f);

更新 事实证明,如果我导入 android.app.AlertDialog ,可以使用此方法调整邮件大小。但是,如果我导入 android.support.v7.app.AlertDialog ,则无法使用此方法进行调整。

2 个答案:

答案 0 :(得分:7)

您可以在样式中覆盖@style/TextAppearance.AppCompat.Subhead样式,如下所示:

 <style name="TextAppearance.AppCompat.Subhead" parent="Base.TextAppearance.AppCompat.Subhead">
        <item name="android:textColor">#000000</item>
        <item name="android:textSize">100sp</item>
    </style>

并且将使用此样式代替appcompat样式

答案 1 :(得分:3)

appcompat-v7 AlertDialog消息TextView具有硬编码样式@style/TextAppearance.AppCompat.Subhead,而不是?android:textAppearanceMedium。您无法通过覆盖主题属性来更改其文本外观。

但是,您可以自定义appcompat-v7 AlertDialog使用的布局。

RES /值/ styles.xml

<style name="AppTheme" parent="Theme.AppCompat">
    <item name="alertDialogStyle">@style/AlertDialog.Custom</item>
    <item name="alertDialogTheme">@style/AlertDialogTheme</item>
</style>

<style name="AlertDialog.Custom" parent="AlertDialog.AppCompat">
    <item name="android:layout">@layout/alert_dialog_custom</item>
</style>

<style name="AlertDialogTheme" parent="Theme.AppCompat.Dialog.Alert">
    ...
</style>

RES /布局/ alert_dialog_custom.xml

制作abc_alert_dialog_material.xml的副本(在Android Studio中通过双班查找),找到TextView @android:id/message,并随意更改。