Es posible justificar el texto en un AlertDialog del título y el mensaje?

Estoy mostrando hebreo mensajes, pero están apareciendo justificados a la izquierda.

He utilizado este método: stackoverflow.com/questions/14439538/…

OriginalEl autor theblitz | 2011-05-25

5 Comentarios

  1. 12

    Tan lejos como puedo ver en el código de AlertDialog y AlertController usted no puede acceder a la TextViews responsable de mensaje y el título.

    Puede utilizar la reflexión para llegar a mAlert campo en AlertDialog instancia, y luego de nuevo el uso de la reflexión para el acceso mMessage y mTitle campos de mAlert. Aunque yo no recomendaría este enfoque se basa en los componentes internos (que podría cambiar en el futuro).


    Como otro (y probablemente mucho mejor) solución, puede aplicar un tema personalizado a través de AlertDialog constructor. Esto permitiría a la derecha, justificar todos los TextViews en ese cuadro de diálogo.

         protected AlertDialog (Context context, int theme)

    Esto debería ser más fácil y más robusta.


    Aquí hay instrucciones paso por paso:

    Paso 1. Crear res/values/styles.xml archivo. Aquí su contenido:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <style name="RightJustifyTextView" parent="@android:style/Widget.TextView">
            <item name="android:gravity">right|center_vertical</item>
        </style>
    
        <style name="RightJustifyDialogWindowTitle" parent="@android:style/DialogWindowTitle" >
             <item name="android:gravity">right|center_vertical</item>
        </style>
    
        <style name="RightJustifyTheme" parent="@android:style/Theme.Dialog.Alert">
            <item name="android:textViewStyle">@style/RightJustifyTextView</item>       
            <item name="android:windowTitleStyle">@style/RightJustifyDialogWindowTitle</item>       
        </style>    
    
    </resources>

    Paso 2. Crear RightJustifyAlertDialog.java archivo. Aquí su contenido:

    public class RightJustifyAlertDialog extends AlertDialog
    {
        public RightJustifyAlertDialog(Context ctx)
        {
            super(ctx,  R.style.RightJustifyTheme);
        }
    }

    Paso 3. Uso RightJustifyAlertDialog de diálogo:

    AlertDialog dialog = new RightJustifyAlertDialog(this);
    dialog.setButton("button", new OnClickListener()
    {           
        public void onClick(DialogInterface arg0, int arg1)
        {
    
        }
    });
    dialog.setTitle("Some Title");
    dialog.setMessage("Some message");
    
    dialog.show();

    Paso 4. Comprobar los resultados:

    Derecho a justificar el texto en AlertDialog

    ¿Tengo que definir todo el tema o es que hay una línea de base que se puede construir? No he utilizado los temas de antes.
    Usted puede heredar el tema por defecto y sólo tiene que añadir los cambios. Por ejemplo, en su styles.xml podría crear un nuevo tema llamado CustomTheme y empezar así:<style name="CustomTheme" parent="android:Theme.Light">. A continuación, sólo tiene que añadir los elementos que desea cambiar.
    He intentado hacer mydialog = new AlertDialog.Builder(this,R. estilo.MyDialogTheme), pero afirma que el constructor no existe.
    Ok gracias. También voy a subir el mini-proyecto que he creado y dar un enlace a ella.
    esto no es trabajar en el AppCompat ellos y de diálogo

    OriginalEl autor inazaruk

  2. 17

    Si quieres una forma fácil y rápida de hacer esto, acabo de crear y modificar el valor predeterminado de alerta utilizando AlertDialog.El generador. Usted puede incluso crear una comodidad método y la clase así:

    /** Class to simplify display of alerts. */
    public class MyAlert {
    
        public static void alert(Context context, String title, String message, OnClickListener listener)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle("My Title");
            builder.setMessage("My message");
            builder.setPositiveButton("OK", listener);
            AlertDialog dialog = builder.show();
    
            //Must call show() prior to fetching views
            TextView messageView = (TextView)dialog.findViewById(android.R.id.message);
            messageView.setGravity(Gravity.RIGHT);
    
            TextView titleView = (TextView)dialog.findViewById(context.getResources().getIdentifier("alertTitle", "id", "android"));
            if (titleView != null) {
                titleView.setGravity(Gravity.RIGHT);
           }
        }
    }

    Por supuesto, usted puede también cambiar la gravedad de CENTRO de centro de alineación en lugar de a la derecha o a la izquierda predeterminada.

    funciona como un encanto! 😀 muchas Gracias!
    Funciona muy bien, gracias.
    Funciona muy bien, pero tengo otro problema. Título & texto se alinean bien, pero los botones no. Cómo llegar botones por id?
    Abrí una pregunta aquí: stackoverflow.com/q/33620800/1334761

    OriginalEl autor n8tr

  3. 7

    Esta es una vieja cuestión, pero hay una solución muy simple. Asumiendo que usted está utilizando MinSdk 17, puede agregar esto a su styles.xml:

    <style name="AlertDialogCustom" parent="Theme.AppCompat.Dialog.Alert">
        <item name="android:layoutDirection">rtl</item>
    </style>

    Y en el AlertDialog.Builder sólo necesitas especificar este AlertDialogCustom en el constructor:

    new AlertDialog.Builder(this, R.style.AlertDialogCustom)
                        .setTitle("Your title?")
                        .show();

    OriginalEl autor yshahak

  4. 3

    Después de luchar con esta por una hora (las soluciones anteriores no funciona para mí), me las arreglé para alinear el AlertDialog del título y el mensaje a la derecha, sin reemplazar los estilos, simplemente cambiando la gravedad y el diseño de parámetros.

    En DialogFragment:

    @Override
    public void onStart() {
        super.onStart();
    
        //Set title and message
        try {
            alignDialogRTL(getDialog(), this);
        }
        catch (Exception exc) {
            //Do nothing
        }
    }

    La función real:

    public static void alignDialogRTL(Dialog dialog, Context context) {
        //Get message text view
        TextView message = (TextView)dialog.findViewById(android.R.id.message);
    
        //Defy gravity
        message.setGravity(Gravity.RIGHT);
    
        //Get title text view
        TextView title = (TextView)dialog.findViewById(context.getResources().getIdentifier("alertTitle", "id", "android"));
    
        //Defy gravity (again)
        title.setGravity(Gravity.RIGHT);
    
        //Get title's parent layout
        LinearLayout parent = ((LinearLayout)Title.getParent());
    
        //Get layout params
        LinearLayout.LayoutParams originalParams = (LinearLayout.LayoutParams)parent.getLayoutParams();
    
        //Set width to WRAP_CONTENT
        originalParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
    
        //Defy gravity (last time)
        originalParams.gravity = Gravity.RIGHT |  Gravity.CENTER_VERTICAL;
    
        //Set updated layout params
        parent.setLayoutParams(originalParams);
    }
    BIG +1.. saludos

    OriginalEl autor Elad Nava

  5. 0

    Para la configuración de la dirección de diseño de diálogo de alerta para RTL puede utilizar OnShowListener método.
    después de configurar el título , el mensaje , …. el uso de este método.

    dialog = alertdialogbuilder.create();
    
            dialog.setOnShowListener(new DialogInterface.OnShowListener() {
                @Override
                public void onShow(DialogInterface dlg) {
                    dialog.getButton(Dialog.BUTTON_POSITIVE).setTextSize(20); //set text size of positive button
                    dialog.getButton(Dialog.BUTTON_POSITIVE).setTextColor(Color.RED); set text color of positive button
    
                    dialog.getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); //set title and message direction to RTL
                }
            });
            dialog.show();

    OriginalEl autor Hamid

Dejar respuesta

Please enter your comment!
Please enter your name here