Diálogo personalizado en Android: ¿Cómo puedo centrar su título?

Estoy desarrollando una aplicación para Android.

¿Cómo puedo centrar el título de un diálogo personalizado que estoy usando?

Gracias.

Acabo de encontrar este post mientras trataba de averiguar cómo hacer lo mismo. Aquí es cómo lo hice para cualquier persona que encuentre esto en el futuro.

El estilo xml es como sigue:

<?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 el método para el diálogo que quiero estilo de crear 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); 

Otra manera que esto se puede hacer programatically está usando 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); 

Usted puede hacerlo en código también. Suponga que tiene 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); } } 

Si no llama a AlertDialog.Builder.setIcon() y AlertDialog.Builder.setTitle() , el cuadro de diálogo personalizado no mostrará el título incorporado / predeterminado Ver. En este caso, puede agregar su título personalizado Ver:

 AlertDialog.Builder.setView(View view) 

Tan pronto como es usted quien crea esta vista es posible implementar cualquier tipo de alineación.

Para su DialogFragment personalizado 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; } 

Tienes algunas sugerencias de inicio aquí para modificar el título de un diálogo: Android – cambiar la vista de título personalizado en tiempo de ejecución No sé si se puede centrar (no lo he intentado), pero si es una vista personalizada Supongo que es muy posible.

Esta es una solución desagradable … Extiende AlertDialog.Builder y anula todos los métodos (por ejemplo, setText, setTitle, setView, etc) para no establecer el texto real del título, título / vista, pero para crear una nueva vista dentro de la Vista del Diálogo Hacer todo lo que hay. Entonces usted es libre de estilo todo lo que quiera.

Para aclarar, en cuanto a la clase padre se refiere, la vista se establece, y nada más.

En cuanto a su clase extendida personalizada se refiere, todo se hace dentro de esa vista.

 TextView titleView = (TextView) dialog.findViewById(android.R.id.title); if(titleView != null) { titleView.setGravity(Gravity.CENTER); } 

Vea este artículo de KodeCenter en Android Dialog y AlertDialog para más detalles.

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(); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.