Estoy desarrollando una aplicación de Android.Diálogo personalizado en Android: ¿Cómo puedo centrar su título?
¿Cómo puedo centrar el título de un cuadro de diálogo personalizado que estoy usando?
Gracias.
Estoy desarrollando una aplicación de Android.Diálogo personalizado en Android: ¿Cómo puedo centrar su título?
¿Cómo puedo centrar el título de un cuadro de diálogo personalizado que estoy usando?
Gracias.
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);
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 .
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.
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.
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);
'R.layout.viewname' En este diseño, ¿qué debe incluirse? solo 'TextView' ?? – DroidLearner
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. –
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
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);
}
}
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;
}
Esto no funciona para mí. findViewById (android.R.id.title); devuelve nulo. – Alyoshak
TextView titleView = (TextView) dialog.findViewById(android.R.id.title);
if(titleView != null) {
titleView.setGravity(Gravity.CENTER);
}
Ver this KodeCenter article on Android Dialog and 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();
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
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
Lo siento, no tengo idea. Lo probé en mi Ideos y el emulador con 1.6 y 2.2 sin problemas. – ChrisJD
no hay "parent =" @ android: style/DialogWindowTitle "". – Hesam