2012-02-15 2 views
8

Sto creando una finestra di dialogo personalizzata e voglio sapere come modificare lo sfondo della barra del titolo.Android - Cambia sfondo titolo della finestra di dialogo personalizzata

Ho provato due approcci:

1 - ho provato il metodo AlertDialog.Builder 'setCustomTitle'. Ho creato una semplice vista di layout comprendente una vista testuale con larghezza e altezza del layout 'match_parent' e colore di sfondo. Quando eseguo l'app, solo la metà superiore della barra del titolo mostra il colore di sfondo. La metà inferiore mostra ancora il colore di sfondo del tema predefinito. Qualcuno sa perché?

2 - Ho creato il mio tema di dialogo. Ho creato uno stile con l'ereditarietà dei genitori su "@android: style/Theme.Holo.Light.Dialog". L'ho poi passato nel costruttore AlertDialog.Builder - new AlertDialog.Builder (questo, R.style.test_dialog). Sembra buono ma in qualche modo la finestra di dialogo è racchiusa in una finestra di dialogo. Una finestra quadrata circonda il dialogo. Qualcuno sa perché?

risposta

35

È possibile creare uno stile come,

<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> 

E è possibile creare un'istanza di dialogo:

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

Ora la finestra di dialogo si presenta con il colore di sfondo nero titolo.

+0

Ciao, grazie per la risposta. Come mai Alert.Builder mostra un'interfaccia utente diversa? AlertDialog.Builder testBuilder; testBuilder = new AlertDialog.Builder (questo, R.style.cust_dialog); \t testBuilder.ImpostaVisualizzazione (layout); Sto usando il tema padre Theme.Holo.Light.Dialog. Anche quando uso Alertdialog.Builder, la finestra di dialogo è racchiusa all'interno di una finestra di dialogo. Qualcuno sa perché? – CLDev

4

L'aspetto della finestra di dialogo all'interno di una finestra è causato dallo sfondo della finestra di dialogo. Ogni finestra di dialogo ha questo, ma le finestre di dialogo predefinite di Android hanno lo sfondo della finestra impostato su trasparente. Per fare questo, aggiungere questo elemento nella finestra di dialogo tema personalizzato:

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

Sto usando Mono Android (Xamarin); sto mostrando un'altra alternativa che sto usando nella mia app per creare una finestra di dialogo in un frammento:

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: questo è il layout personalizzato listview, qui è il file 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.Title: questo è l'ID della vista testo che contiene il titolo della finestra di dialogo. ed è predefinito da Android. in questo modo otterrai una finestra di dialogo che puoi modificare nel modo desiderato.

+0

In Android Studio 'TextView titleView = (TextView) myDialog.findViewById (android.R.id.title);', funziona perfettamente. – grabarz121

1

Crea un file di layout XML per il titolo e gonfiarlo e impostare per l'AlertDialog come

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

Si può solo impostare titolo personalizzato come questo

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

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

e nel layout custom_title si può crea un titolo personalizzato come questo

<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>