2012-02-15 20 views
8

Estoy creando un cuadro de diálogo personalizado y quiero saber cómo cambiar el fondo de la barra de título.Android - Cambiar fondo de título de cuadro de diálogo personalizado

He intentado dos enfoques:

1 - Yo he probado el método AlertDialog.Builder 'setCustomTitle'. Creé una vista de diseño simple que comprende una vista de texto con ancho y alto de diseño 'match_parent' y color de fondo. Cuando ejecuto la aplicación, solo la mitad superior de la barra de título muestra el color de fondo. La mitad inferior sigue mostrando el color de fondo del tema predeterminado. ¿Alguien sabe por qué?

2 - He creado mi propio tema de diálogo. He creado un estilo con la herencia principal para '@android: style/Theme.Holo.Light.Dialog'. Luego pasé eso en el constructor AlertDialog.Builder - nuevo AlertDialog.Builder (esto, R.style.test_dialog). Parece bueno, pero de alguna manera el diálogo está envuelto dentro de un diálogo. Un cuadro cuadrado rodea el diálogo. ¿Alguien sabe por qué?

Respuesta

35

Puede crear un estilo similar,

<style name="cust_dialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowTitleStyle">@style/dialog_title_style</item> 
    </style> 

<style name="dialog_title_style" parent="android:Widget.TextView"> 
    <item name="android:background">@android:color/black</item> 
    <item name="android:padding">10dp</item> 
</style> 

Y se puede crear una instancia de diálogo:

Dialog dialog=new Dialog(this,R.style.cust_dialog); 
dialog.setContentView(R.layout.fragment_features_dialog); 
dialog.setTitle(R.string.features); 

Ahora el cuadro de diálogo aparece con el título negro color de fondo.

+0

Hola, gracias por la respuesta. ¿Cómo es que con Alert.Builder se muestra una interfaz de usuario diferente? AlertDialog.Builder testBuilder; testBuilder = new AlertDialog.Builder (esto, R.style.cust_dialog); \t testBuilder.setView (diseño); Estoy usando el tema principal Theme.Holo.Light.Dialog. También cuando uso Alertdialog.Builder, el diálogo se envuelve dentro de un cuadro de diálogo. ¿Alguien sabe por qué? – CLDev

4

La apariencia del diálogo envuelto dentro de un diálogo es causada por el fondo de la ventana del diálogo. Cada diálogo tiene esto, pero los diálogos predeterminados de Android tienen el fondo de la ventana configurado como transparente. Para ello, agregue este elemento en su tema de diálogo personalizado:

<style name="CustomDialog" parent="@android:style/Theme.Holo.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 
1

Estoy usando Mono Android (Xamarin); estoy que muestra otra alternativa que estoy usando en mi aplicación para crear un diálogo en un fragmento:

Dialog itemDialog = new Dialog(this.Activity); 
TextView alertTitle=(TextView)itemDialog.Window.DecorView.FindViewById(Android.Resource.Id.Title); 

alertTitle.SetTextColor(Android.Graphics.Color.Blue); 
alertTitle.SetBackgroundColor(Android.Graphics.Color.Orange); 
itemDialog.SetContentView(Resource.Layout.listview_custom_dialog); 
string[] options = new string[] { "Open", "Mark as Unread","Mute","View  
Profile","Block Connection","Delete Conversation" }; 
ArrayAdapter<string> adapter = new ArrayAdapter<string>(this.Activity, 
Resource.Layout.listitem_custom_dialog,Resource.Id.textViewDialogDescription, 
options); 

Resource.Layout.listitem_custom_dialog: se trata de diseño personalizado vista de lista, aquí está el archivo xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/transparent" > 
<TextView 
    android:id="@+id/textViewDialogDescription" 
    android:layout_width="match_parent" 
    android:layout_height="44dp" 
    android:background="#ffffff" 
    android:textColor="#386B96" 
    android:paddingLeft="4dp" 
    android:textSize="14dp" /> 
</RelativeLayout> 

ListView lv = itemDialog.FindViewById<ListView> 
(Resource.Id.listViewDialogItems); 
lv.Adapter = adapter; 
adapter.NotifyDataSetChanged(); 
itemDialog.SetCancelable(true); 
itemDialog.SetTitle("Conversation"); 
itemDialog.Show(); 

Android.Resource.Id.Título: esta es la identificación de la vista de texto que contiene el título del cuadro de diálogo. y está predefinido por Android. de esta manera obtendrá un diálogo que puede diseñar de la manera que desee.

+0

En Android Studio 'TextView titleView = (TextView) myDialog.findViewById (android.R.id.title);', funciona perfectamente. – grabarz121

1

Crear un archivo de diseño xml para su título y inflarlo y listo para la AlertDialog como

View view = getLayoutInflater().inflate(R.layout.cust_dialog_title, null); 
alertDialog.setCustomTitle(view); 
1

Puede acaba de establecer título personalizado como éste

LayoutInflater inflater = this.getLayoutInflater(); 
View titleView = inflater.inflate(R.layout.custom_title, null); 

new AlertDialog.Builder(SubCategoryActivity.this) 
        .setCustomTitle(titleView); 

y en la disposición custom_title que pueda crear un título personalizado como este

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 
     android:id="@+id/llsubhead" 
     android:background="@color/colorPrimary"> 

     <TextView 
      android:id="@+id/exemptionSubHeading4" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="10dp" 
      android:layout_weight="1" 
      android:text="Exemption Sub Head" 
      android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" 
      android:textColor="@color/white" /> 
    </LinearLayout> 
</LinearLayout> 
Cuestiones relacionadas