10

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

我尝试了两种方法:

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

2 - 我创建了自己的对话主题。我已经创建了一个带有父继承的样式到'@android:style/Theme.Holo.Light.Dialog'。然后我在 AlertDialog.Builder 构造函数中传递了它 - new AlertDialog.Builder(this, R.style.test_dialog)。看起来不错,但不知何故,对话框被包装在对话框中。对话框周围有一个方框。有谁知道为什么?

4

5 回答 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);

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

于 2012-02-16T11:27:15.067 回答
4

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

<style name="CustomDialog" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style> 
于 2013-11-18T14:13:58.807 回答
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预定义的。这样,您将获得一个可以按照您想要的方式设置样式的对话框。

于 2015-02-16T17:35:56.380 回答
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>
于 2017-02-09T11:14:14.273 回答
1

为您的标题创建一个 xml 布局文件并将其膨胀并设置为 AlertDialog 为

View view = getLayoutInflater().inflate(R.layout.cust_dialog_title, null);
alertDialog.setCustomTitle(view);
于 2016-01-29T06:12:40.940 回答