2010-10-26 22 views

Respuesta

51

Acabo de encontrar esta publicación al intentar averiguar cómo hacer lo mismo. Así es como lo hice para cualquier otra persona que encuentre esto en el futuro.

de estilo XML es el siguiente:

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
     <style name="PauseDialog" parent="@android:style/Theme.Dialog"> 
      <item name="android:windowTitleStyle">@style/PauseDialogTitle</item> 
     </style> 

     <style name="PauseDialogTitle" parent="@android:style/TextAppearance.DialogWindowTitle"> 
      <item name="android:gravity">center_horizontal</item> 
     </style> 
     <style name="DialogWindowTitle"> 
     <item name="android:maxLines">1</item> 
     <item name="android:scrollHorizontally">true</item> 
     <item name="android:textAppearance">@android:style/TextAppearance.DialogWindowTitle</item> 
     </style> 
    </resources> 

Y en mis actividades onCreateDialog método para el cuadro de diálogo que quiero labrado creo el diálogo como este:

Dialog pauseDialog = new Dialog(this, R.style.PauseDialog); 
pauseDialog.setTitle(R.string.pause_menu_label); 
pauseDialog.setContentView(R.layout.pause_menu); 
+0

He intentado su sugerencia pero no centra el título del Diálogo (HTC Wildfire corriendo con Android 2.2.1) ... ¿Alguna idea? Porque intuitivamente tu solución tiene sentido :) – Ready4Android

+0

Lo siento, no tengo idea. Lo probé en mi Ideos y el emulador con 1.6 y 2.2 sin problemas. – ChrisJD

+1

no hay "parent =" @ android: style/DialogWindowTitle "". – Hesam

0

Tienes algunos consejos de partida aquí para modificar el título de un cuadro de diálogo: Android - change custom title view at run time No sabe si puede estar centrado (no lo he probado), pero si es una costumbre Ver supongo que es muy posible .

1

Si no llama a AlertDialog.Builder.setIcon() y AlertDialog.Builder.setTitle(), su cuadro de diálogo personalizado no mostrará la vista de título incorporada/predeterminada. En este caso, usted es capaz de añadir su título personalizado Vista:

AlertDialog.Builder.setView(View view) 

Tan pronto como son ustedes los que crear esta imagen se puede implementar cualquier tipo de alineación.

0

he aquí una solución desagradable ... Extienda AlertDialog.Builder e invalide todos los métodos (por ejemplo, setText, setTitle, setView, etc.) para no configurar el texto/título/vista real del cuadro de diálogo, pero para crear una nueva vista dentro de la vista del cuadro de diálogo, haga todo lo que esté allí. Entonces eres libre de poner todo a tu gusto.

Para aclarar, en lo que respecta a la clase principal, la Vista está configurada, y nada más.

En lo que respecta a su clase extendida personalizada, todo se hace dentro de esa vista.

85

Otra forma en que esto se puede hacer mediante programación está utilizando el setCustomTitle():

// Creating the AlertDialog with a custom xml layout (you can still use the default Android version) 
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.viewname, null); 
builder.setView(view); 

TextView title = new TextView(this); 
// You Can Customise your Title here 
title.setText("Custom Centered Title"); 
title.setBackgroundColor(Color.DKGRAY); 
title.setPadding(10, 10, 10, 10); 
title.setGravity(Gravity.CENTER); 
title.setTextColor(Color.WHITE); 
title.setTextSize(20); 

builder.setCustomTitle(title); 
+0

'R.layout.viewname' En este diseño, ¿qué debe incluirse? solo 'TextView' ?? – DroidLearner

+0

No es necesario incluir la sección de vista completa, esto es solo si desea personalizar la vista predeterminada de AlertDialog. Yo sí creo que tiene que ser un TextView. –

+0

Obtengo un borde de color gris para esta vista de texto. ¿Cómo elimino eso? He intentado \t \t \t title.setBackgroundResource (R.drawable.black_border); Pero esto no ayuda. @LandLPartners – user1051505

8

Usted puede hacerlo en código. Suponga que tiene un fragmento de diálogo y luego agregue las siguientes líneas de código.

@Override 
public void onStart() 
{ 
    super.onStart(); 

    TextView textView = (TextView) this.getDialog().findViewById(android.R.id.title); 
    if(textView != null) 
    { 
     textView.setGravity(Gravity.CENTER); 
    } 
} 
+0

no funciona en el diálogo de appcompatv7 – Asthme

+0

Tampoco funciona para mí. findViewById (android.R.id.title); devuelve nulo. – Alyoshak

+0

funcionó para mí. Traté de obtener *** *** TextView *** justo después de *** Dialog *** objeto de instanciación. –

1

Para su costumbre DialogFragment usted puede hacer esto:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Dialog dialog = super.onCreateDialog(savedInstanceState); 
    final TextView textView = (TextView) dialog.findViewById(android.R.id.title); 
    if(textView != null) { 
     textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
    } 
    return dialog; 
} 
+0

Esto no funciona para mí. findViewById (android.R.id.title); devuelve nulo. – Alyoshak

0

Prueba esto:

TextView titleText = (TextView) helpDialog.findViewById(R.id.alertTitle); 
if(titleText != null) { 
    titleText.setGravity(Gravity.CENTER); 
} 

código completo (usando android.support.v7.app.AlertDialog):

AlertDialog.Builder helpDialogBuilder = new AlertDialog.Builder(context) 
     .setTitle(/*your title*/) 
     .setMessage(/*your message*/) 
     .setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         /*you can do something here*/ 

         dialog.dismiss(); 
        } 
       }) 
     .setPositiveButton("OK", 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         /*you can do something here*/ 

         dialog.dismiss(); 
        } 
       }); 

final AlertDialog helpDialog = helpDialogBuilder.create(); 

helpDialog.setOnShowListener(new DialogInterface.OnShowListener() { 
    @Override 
    public void onShow(DialogInterface dialog) { 

     TextView titleText = (TextView) helpDialog.findViewById(R.id.alertTitle); if(titleText != null) { titleText.setGravity(Gravity.CENTER); } 

     TextView messageText = (TextView) helpDialog.findViewById(android.R.id.message); 
     if(messageText != null) { 
      messageText.setGravity(Gravity.CENTER); 
     } 
    } 
}); 

helpDialog.show();
1

usted puede hacerlo mediante programación sin vista personalizada:

@Override 
public void onStart() 
{ 
    super.onStart(); 

    TextView textViewVanilla = (TextView) this.getDialog().findViewById(android.R.id.title); 
    if(textViewVanilla != null) 
    { 
     textViewVanilla.setGravity(Gravity.CENTER); 
    } 
    // support for appcompat v7 
    TextView textViewAppcompat = (TextView) this.getDialog().findViewById(android.support.v7.appcompat.R.id.alertTitle); 
    if(textViewAppcompat != null) 
    { 
     textViewAppcompat.setGravity(Gravity.CENTER); 
    } 
} 

Gracias @hesam de la idea. Para el diseño de appcompat, vea Android/sdk/platforms/android-26/data/res/layout/alert_dialog_title_material.xml

Cuestiones relacionadas