2012-02-15 83 views
8

我正在创建自定义对话框,我想知道如何更改标题栏的背景。Android - 更改自定义对话框标题背景

我已经试过两种方法:

1 - 我已经试过AlertDialog.Builder法 'setCustomTitle'。我创建了一个简单的布局视图,包含一个带有布局宽度和高度'match_parent'和背景色的文本视图。当我运行应用程序时,只有标题栏的上半部分显示背景颜色。下半部分仍然显示默认的主题背景颜色。有谁知道为什么?

2 - 我创建了自己的对话框主题。我创建了一个带有父代继承的样式,以'@android:style/Theme.Holo.Light.Dialog'。然后,我在AlertDialog.Builder构造函数中传递了这个新警告对话框。(这是一个新的Alertstyle.test_dialog)。看起来不错,但不知何故对话框被包装在对话框中。一个方形框围绕着对话框。 有谁知道为什么?

回答

35

您可以创建一个风格类似,

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

而且你可以实例对话:

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

现在对话框显示了黑色的标题背景颜色。

+0

嗨,感谢您的回复。 Alert.Builder如何显示不同的用户界面? AlertDialog.Builder testBuilder; testBuilder = new AlertDialog.Builder(this,R.style.cust_dialog); \t testBuilder。的setView(布局); 我使用的是父主题Theme.Holo.Light.Dialog。 另外,当我使用Alertdialog.Builder时,对话框被包装在一个对话框中。有谁知道为什么? – CLDev 2012-02-16 15:25:01

4

对话框包含在对话框中的外观是由对话框的窗口背景引起的。每个对话框都有这个,但默认的Android对话框的窗口背景设置为透明。为此,请在您的自定义对话框主题中添加此项:

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

我正在使用Mono Android(Xamarin);我向你表明我用我的应用程序来创建一个片段一个对话框另一种选择:

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:这是自定义列表视图的布局,这里是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:这是包含对话标题的textview的id。它是由android预定义的。 这样你会得到一个对话框,你可以按你想要的样式进行设计。

+0

在Android Studio中'TextView titleView =(TextView)myDialog.findViewById(android.R.id.title);',完美地工作。 – grabarz121 2018-02-15 12:54:16

1

为您的标题创建一个XML配置文件,它充气,并设置向AlertDialog为

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

您可以只设置自定义标题这样

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

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

和custom_title布局,可以创建像这样的自定义标题

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