I have seen various solutions on the web for how to achieve this, many are complex and require custom handling code to be written for each preference. A neater and more reusable solution is to override the EditTextPreference class itself. There are various ways to do this to achieve the desired result, but I think overriding getSummary() is the neatest option.
public class MyTextPreference extends EditTextPreference { public MyTextPreference(Context context) { super(context); } public MyTextPreference(Context context, AttributeSet attrs) { super(context, attrs); } public MyTextPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } // Override getSummary to return the current value formatted using the default summary string @Override public CharSequence getSummary() { return String.format(super.getSummary().toString(), getText()); } }
This solution allows you to specify a format string in the default summary string for example "Cache size is %s MB". The current preference value is then simply formatted using this template. If you want the current setting to be shown raw with no template, simply set the default summary text to "%s".