Android EditTextPreference对话框的样式/主题

4

我正在尝试为SettingsActivity中的EditTextPreference选择时出现的对话框进行样式设置。到目前为止,我已经能够使用以下方式更改两个按钮和背景的颜色:

    dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(0xffffffff);
    dialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(0xffffffff);
    dialog.getWindow().setBackgroundDrawableResource(R.drawable.blue_background);

但是我目前还无法更改对话框顶部的标题。

enter image description here

“Zone”标题的颜色是从我用于偏好设置列表的样式中检索出来的,它被继承了,我无法弄清如何分配一个样式来更改该标题的颜色。
<style name="MyPreferenceTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@color/care_call_white</item>
    <item name="android:textColor">@drawable/text_colour_state</item>
    <item name="android:textColorSecondary">@drawable/text_colour_state</item>
</style>

有谁能帮忙设计一个样式来实现这个效果?或者提供一些能够设置的代码?我的所有对话框都使用同一个样式,但是这个对话框比较棘手,因为它是偏好设置的一部分,所以我无法像其他对话框那样自定义它。

只需澄清一下,需要更改的唯一内容是“区域”标题.. 我希望它是白色的。

4个回答

2

有了新的AndroidX偏好库,EditTextPreference中没有onPrepareDialogBuilder方法。

我是这样处理的:

我的基本应用程序主题:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
     //add here your properties
</style>

我的偏好主题:

<style name="AppTheme.Settings">
     <!-- This will change the opening dialogs for EditTextPreference -->
     <item name="alertDialogStyle">@style/Theme.AlertDialog.Default</item>
</style>

在我的情况下,Theme.AlertDialog.Default是一个带有父级ThemeOverlay.MaterialComponents.MaterialAlertDialog的自定义对话框主题。 然后在你的AndroidManifest.xml中,只需将该主题应用于处理偏好设置的活动。

1

已排序。

我创建了一个CustomEditTextPreference类,继承自EditTextPreference,然后覆盖了

@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
    builder.getContext().setTheme(R.style.PreferenceThemeDialog);
    super.onPrepareDialogBuilder(builder);
}

并在构建器上下文中更改了样式
<style name="PreferenceThemeDialog">
    <item name="android:textColor">@color/care_call_white</item>
</style>

我该如何在AndroidX上实现这个?我找不到onPrepareDialogBuilder方法来覆盖它。 - Kidus Tekeste

0

您可以通过在设置活动或片段中找到首选项并编辑其属性来更改主题或标题的方式之一。

要编辑主题,您可以执行以下操作:

findPreference<EditTextPreference>(YOUR_KEY_GOES_HERE)?.context?.setTheme(YOUR.THEME.GOES.HERE)

要更改标题,您需要这样做:

findPreference<EditTextPreference>(BACKGROUND_SYNC_PERIOD_KEY)?.dialogTitle = YOUR_TITLE_GOES_HERE

这两个都是Kotlin编写的,但在Java中本质上是相同的。(你可以将其粘贴到Android Studio中,它应该会自动格式化)。


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

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


1
使用EditTextPreference时,您不需要创建对话框对象,而是直接获取它。因此,在创建时无法输入样式。 - Murphybro2
是的,但你说你正在尝试为对话框设置样式。无论如何祝你好运。你正在使用对话框类的方法,所以试一试吧! - Kristo

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