Android EditTextPreference对话框样式/主题

时间:2016-02-17 10:54:45

标签: android colors dialog styles preferences

我正在尝试设置在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>

任何人都可以帮助一种可以做到这一点的风格吗?或者使用一些可能设置它的代码?我的所有对话框都是相同的样式,但这一个比较复杂,因为它是Preference的一部分所以我不能像对待其他人那样自定义它。

只是为了澄清,唯一需要改变的是“区域”标题..我希望它是白色的。

4 个答案:

答案 0 :(得分:1)

排序。

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

@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>

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

有了新的AndroidX首选项库,onPrepareDialogBuilder中就没有EditTextPreference

我已经按照这种方式进行了:

我的基本应用主题:

<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中,只需将主题应用于处理首选项的Activity

答案 3 :(得分: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中,并且应该对其进行格式化)。