更改 EditTextPreference 对话框输入文本颜色

Change EditTextPreference dialog input text color

我可以更改编辑文本首选项的标题和摘要颜色。当你点击它时,我的背景是黑色的,按钮是白色的。我仍然需要弄清楚如何更改实际值文本。有什么想法吗?

如果我也能改变那条线的颜色就好了。

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

我的风格在这里:

<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>
<android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/prompt_password"
                android:imeActionId="6"
                android:textColor="@color/white"
                android:textColorHint="@color/white"
                android:imeActionLabel="@string/action_sign_in_short"
                android:imeOptions="actionUnspecified"
                android:inputType="textPassword"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

试试这个:

<style name="JayPreferenceThemeDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="colorAccent">@color/colorAccent</item> //line color
        <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>

来自link热心分享: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);
    }
}