2012-04-19 17 views
5

Tengo un AlertDialog con el que uso una vista de diálogo personalizada. La idea de la vista de título personalizada parece bastante simple, pero hay un borde negro alrededor del título personalizado del que parece que no puedo deshacerme. Los lados superior, izquierdo y derecho tienen un borde de un solo píxel, mientras que el lado inferior tiene alrededor de un borde de 5 píxeles.El título personalizado de AlertDialog tiene un borde negro

Crear el diálogo en Java:

View titleView = inflater.inflate(R.layout.part_list_item, parent, false); 
((TextView) titleView.findViewById(R.id.partName)).setText(titleText); 
AlertDialog productDialog = new AlertDialog.Builder(getContext()) 
    .setCustomTitle(titleView) 
    .setAdapter(adapter, doNothingClickListener) 
    .create(); 

personalizada título de la vista de diseño, part_list_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#ff0000" 
    android:id="@+id/partName" 
    android:layout_marginLeft="6dip" 
    android:textAppearance="?android:attr/textAppearanceLargeInverse" 
    /> 

Lo que veo:

screenshot broken

Lo que quiero ver:

screenshot fixed

¿Alguna idea?

+0

es relleno en la disposición relativa y sombra en TextView necesario ..? – ngesh

+1

@sandy Pregunta justa. Quité esos bits, y el resultado es el mismo, excepto que el borde negro inferior ahora es más grande. –

+0

Intenta establecer 'attachToRoot' en true cuando se infle el XML. – dreamtale

Respuesta

0

Este es el resultado creado por el android cuando tiene un título en la alerta. Por lo que puedo ver de las capturas de pantalla, el "cuerpo" de la alerta también es una vista personalizada y no la propiedad del mensaje de alerta.

Así que la forma más fácil de obtener el resultado que desea es agregar el diseño del título en la vista personalizada de la alerta.

ejemplo:

View titleView = inflater.inflate(R.layout.part_list_item, parent, false); 

View bodyView = .... 
bodyView.addview(titleView); 
((TextView) itleView.findViewById(R.id.partName)).setText(titleText); 

AlertDialog productDialog = new AlertDialog.Builder(getContext()); 
productDialog.setView(bodyView); 
... 

productDialog.create(); 

Cuando el bodyView.addview(titleView); añade la disposición del título en su cuerpo de la alerta.

Y el productDialog.setView(bodyView); establece la vista personalizada como el cuerpo de su alerta.

+1

¿Qué ventaja tiene su enfoque al eliminar 'AlertDialog' a favor de un' Diálogo' personalizado? Para mí, el objetivo de usar 'AlertDialog' es que ya hay un título y un cuerpo que simplemente puedo completar. –

+0

Simplemente sugiero que se pueda agregar titleView en la vista de" cuerpo ". eso resolverá el problema con el borde. ¡Porque el borde está establecido por defecto entre el título y el mensaje! –

3

Prueba esto:

LayoutInflater inflater = (LayoutInflater)yourClass.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View titleView = inflater.inflate(R.layout.custom_dialog, null); 

((TextView) titleView.findViewById(R.id.partName)).setText("Your Title"); 
alert1.setCustomTitle(titleView); 
Cuestiones relacionadas