【问题标题】:Android - Change custom dialog title backgroundAndroid - 更改自定义对话框标题背景
【发布时间】:2012-02-15 22:24:37
【问题描述】:

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

我尝试了两种方法:

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

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

【问题讨论】:

    标签: android dialog customdialog


    【解决方案1】:

    您可以创建类似的样式,

    <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 = new AlertDialog.Builder(this, R.style.cust_dialog); testBuilder.setView(布局);我正在使用父主题 Theme.Holo.Light.Dialog。此外,当我使用 Alertdialog.Builder 时,对话框会包含在对话框中。有谁知道为什么?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我正在使用 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); 中,完美运行。
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        你可以像这样设置自定义标题

        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>
        

        【讨论】:

          猜你喜欢
          • 2012-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-08
          相关资源
          最近更新 更多