Estaba intentando establecer el tamaño del texto del mensaje en un cuadro de diálogo de alerta, pero no pude hacerlo después de muchos intentos. Por otro lado, el tamaño del texto del título y del botón se puede controlar simultáneamente con el tamaño de fuente del tema (establecido en 14 sp en el ejemplo siguiente).

El cuadro de diálogo de alerta se creó utilizando la siguiente descripción de estilo XML, siguiendo el enfoque descrito en este 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>

El tema se invocó en tiempo de ejecución usando este código:

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

Esto es lo que obtuve: Captura de pantalla del cuadro de diálogo de alerta

Aparentemente, el tamaño del texto del mensaje es mucho menor que 22 sp. Sin embargo, podría ajustar el tamaño de fuente durante el tiempo de ejecución:

dialog.show();

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

Actualizar Resulta que si importo android.app.AlertDialog , el tamaño del mensaje se puede ajustar con este método. Sin embargo, si importo android.support.v7.app.AlertDialog , no se puede ajustar con este método.

3
Darsen Lu 24 jul. 2016 a las 09:19

2 respuestas

La mejor respuesta

Appcompat-v7 AlertDialog mensaje TextView tiene un estilo codificado @style/TextAppearance.AppCompat.Subhead en lugar de ?android:textAppearanceMedium. No puede cambiar la apariencia del texto anulando el atributo del tema.

Sin embargo, puede personalizar el diseño utilizado por appcompat-v7 AlertDialog.

Res / valores / estilos.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 / layout / alert_dialog_custom.xml

Haga una copia de abc_alert_dialog_material.xml (busque mediante doble turno en Android Studio), busque un TextView con @android:id/message y modifíquelo como desee.

5
Eugen Pechanec 24 jul. 2016 a las 21:08

Puede anular el estilo @style/TextAppearance.AppCompat.Subhead en sus estilos, algo así:

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

Y este estilo se utilizará en su lugar estilo appcompat

8
Elangovan 27 oct. 2016 a las 11:20