我正在尝试设置在SettingsActivity中选择EditTextPreference时出现的对话框。到目前为止,我已经能够改变两个按钮和背景的颜色:
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(0xffffffff);
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(0xffffffff);
dialog.getWindow().setBackgroundDrawableResource(R.drawable.blue_background);
但我到目前为止无法更改对话框顶部的标题。
'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的一部分所以我不能像对待其他人那样自定义它。
只是为了澄清,唯一需要改变的是“区域”标题..我希望它是白色的。
答案 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中,并且应该对其进行格式化)。