Android - 更改自定义对话框标题背景

10

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

我尝试了两种方法:

1- 我尝试了AlertDialog.Builder方法中的“setCustomTitle”。我创建了一个简单的布局视图,包括一个文本视图,布局宽度和高度为'match_parent'和背景颜色。当我运行应用程序时,只有标题栏的顶部显示背景颜色。底部仍然显示默认主题背景颜色。有人知道原因吗?

2- 我创建了自己的对话框主题。我创建了一个带有父继承'@android:style/Theme.Holo.Light.Dialog'的样式。然后我在AlertDialog.Builder构造函数中传递了它 - new AlertDialog.Builder(this,R.style.test_dialog)。看起来很好,但是不知怎么回事,对话框被包裹在另一个对话框内。一个正方形框围绕着对话框。 有人知道原因吗?

5个回答

40

你可以创建一个类似这样的样式:

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

现在弹出的对话框具有黑色标题背景颜色。


嗨,感谢回复。 为什么Alert.Builder显示不同的UI? AlertDialog.Builder testBuilder; testBuilder = new AlertDialog.Builder(this, R.style.cust_dialog); testBuilder.setView(layout);我正在使用父主题Theme.Holo.Light.Dialog。此外,当我使用Alertdialog.Builder时,对话框被包装在对话框中。有人知道为什么吗? - CLDev

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: 这是包含对话框标题的文本视图的 ID,由 Android 预定义。这样,您将获得一个对话框,可以按您想要的方式进行样式设置。

在Android Studio中,TextView titleView = (TextView) myDialog.findViewById(android.R.id.title);可以完美地工作。 - grabarz121

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

在自定义标题布局中,您可以像这样创建自定义标题。
<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接