javaandroidcolorsedittextpreference

Change EditTextPreference dialog input text color


I am able to change the title and summary color of my edit text preference. When you click into it I have the background dark and the buttons white. I still need to figure out how to change the actual value text. Any ideas?

Would be great if I could change the color of that line too.

enter image description here

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Typeface;
import android.preference.EditTextPreference;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.kisnardonline.kisnardonline.GameActivity;
import com.kisnardonline.kisnardonline.R;

@SuppressLint("AppCompatCustomView")
public class FontEditTextPreference extends EditTextPreference {
    public FontEditTextPreference(Context context) {
        super(context);
    }

    public FontEditTextPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public FontEditTextPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected View onCreateView(ViewGroup viewGroup) {
        Typeface customFont = FontCache.getTypeface("UnderwoodChampionRegular.ttf", GameActivity.commandReceiver.activity_settings);
        View v = super.onCreateView(viewGroup);
        try {
            TextView titleView = (TextView) v.findViewById(android.R.id.title);
            titleView.setTypeface(customFont);
            titleView.setTextColor(ContextCompat.getColor(GameActivity.commandReceiver.activity_settings, R.color.THEME_LIGHT_TEXT));
            TextView summaryView = (TextView) v.findViewById(android.R.id.summary);
            summaryView.setTypeface(customFont);
            summaryView.setTextColor(ContextCompat.getColor(GameActivity.commandReceiver.activity_settings, R.color.THEME_LIGHT_TEXT));
        } catch (Exception e) {
            Log.e("jay", "Exception in FontEditTextPreference", e);
        }

        return v;
    }

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

My style is here:

<style name="JayPreferenceThemeDialog"  >
    <item name="android:colorBackground">@color/THEME_LIGHTER_BACKGROUND</item>
    <item name="android:textColor">@android:color/background_light</item>
    <item name="android:textColorSecondary">@android:color/background_light</item>
</style>

Solution

  • From the link Zealous shared: Android Theming Preference Dialog

    @Override
    protected void showDialog(Bundle state) {
        super.showDialog(state);
        Typeface customFont = FontCache.getTypeface("UnderwoodChampionRegular.ttf", GameActivity.commandReceiver.activity_settings);
    
        final Resources res = getContext().getResources();
        final Window window = getDialog().getWindow();
    
        // Title
        final int titleId = res.getIdentifier("alertTitle", "id", "android");
        final View title = window.findViewById(titleId);
        if (title != null) {
            ((TextView) title).setTextColor(ContextCompat.getColor(MyCommandReceiver.context_settings, R.color.THEME_LIGHT_TEXT));
            ((TextView) title).setTypeface(customFont);
        }
    
        // Title divider
        final int titleDividerId = res.getIdentifier("titleDivider", "id", "android");
        final View titleDivider = window.findViewById(titleDividerId);
        if (titleDivider != null) {
            titleDivider.setBackgroundColor(ContextCompat.getColor(MyCommandReceiver.context_settings, R.color.THEME_LIGHT_TEXT));
        }
    
        // EditText
        final View editText = window.findViewById(android.R.id.edit);
        if (editText != null) {
            ((EditText) editText).setTextColor(ContextCompat.getColor(MyCommandReceiver.context_settings, R.color.THEME_LIGHT_TEXT));
            ((EditText) editText).setTypeface(customFont);
        }
    
        //OK button
        final View okButton = window.findViewById(android.R.id.button1);
        if (okButton != null) {
            ((Button) okButton).setTextColor(ContextCompat.getColor(MyCommandReceiver.context_settings, R.color.THEME_LIGHT_TEXT));
            ((Button) okButton).setTypeface(customFont);
        }
    
        //Cancel button
        final View cancelButton = window.findViewById(android.R.id.button2);
        if (cancelButton != null) {
            ((Button) cancelButton).setTextColor(ContextCompat.getColor(MyCommandReceiver.context_settings, R.color.THEME_LIGHT_TEXT));
            ((Button) cancelButton).setTypeface(customFont);
        }
    }