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

问题描述 投票:9回答:6

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

我尝试了两种方法:

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

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

android dialog customdialog
6个回答
37
投票

你可以创建一个样式,

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

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


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预定义的。通过这种方式,您将获得一个可以按照自己的方式设置样式的对话框。


1
投票

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

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>
© www.soinside.com 2019 - 2024. All rights reserved.