问题
I'm trying to style the dialog box that appears when I select an EditTextPreference in my SettingsActivity. So far I have been able to change the colour of the two buttons and the background with:
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(0xffffffff);
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(0xffffffff);
dialog.getWindow().setBackgroundDrawableResource(R.drawable.blue_background);
But I am so far unable to change the title at the top of the dialog.
The colour of the 'Zone' title is being retrieved from a style I use for the preference list, it's being inherited and I can't figure out how to assign it a style that will change that title colour
<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>
Can anyone help with a style that could do this? Or with some code that could possibly set it instead? All my dialog boxes are styled the same but this one is trickier as it's part of the Preference so I can't customise it the same way I did with the others.
Just to clarify, the only thing that needs changing is the "Zone" title.. I would like it to be white.
回答1:
Sorted.
I created a CustomEditTextPreference class that inherited EditTextPreference and then overrode
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
builder.getContext().setTheme(R.style.PreferenceThemeDialog);
super.onPrepareDialogBuilder(builder);
}
and changed the style in the builders context with
<style name="PreferenceThemeDialog">
<item name="android:textColor">@color/care_call_white</item>
</style>
回答2:
With new AndroidX Preference library there is no onPrepareDialogBuilder
in EditTextPreference
.
I've proceeded in this way:
My base app theme:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
//add here your properties
</style>
my preference theme:
<style name="AppTheme.Settings">
<!-- This will change the opening dialogs for EditTextPreference -->
<item name="alertDialogStyle">@style/Theme.AlertDialog.Default</item>
</style>
in my case Theme.AlertDialog.Default
is a custom Dialog theme with with parent ThemeOverlay.MaterialComponents.MaterialAlertDialog
Then in your AndroidManifest.xml
simply apply the theme to the the Activity which handle the preferences
回答3:
One way you can change the theme or the title of a preference is by finding it within your settings activity or fragment and then editing the attributes.
To edit the theme you would do this:
findPreference<EditTextPreference>(YOUR_KEY_GOES_HERE)?.context?.setTheme(YOUR.THEME.GOES.HERE)
To change the title you would do this:
findPreference<EditTextPreference>(BACKGROUND_SYNC_PERIOD_KEY)?.dialogTitle = YOUR_TITLE_GOES_HERE
Both of these are in kotlin but it is essentially the same thing in java.(you can paste this into android studio and it should format it).
回答4:
<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>
And you can instantiate dialog:
Dialog dialog=new Dialog(this,R.style.cust_dialog);
dialog.setContentView(R.layout.fragment_features_dialog);
dialog.setTitle(R.string.features);
Now the dialog shows up with black title background color.
来源:https://stackoverflow.com/questions/35454649/android-edittextpreference-dialog-style-theme