Java Android EditTextPreference样式

Java Android EditTextPreference样式,java,android,styles,android-edittext,edittextpreference,Java,Android,Styles,Android Edittext,Edittextpreference,在我的应用程序设置中,我使用EditTextPreference,在android API uder 11上,edittext字段具有黑色背景和黑色文本颜色。 如何设置背景色 我试过: 主题: <item name="android:editTextPreferenceStyle">@style/EditTextAppTheme</item> 在过去的几天里,我也一直在努力解决这个问题。我发现所有的EditTextPrefence扩展都是AlertDialog和Edit

在我的应用程序设置中,我使用EditTextPreference,在android API uder 11上,edittext字段具有黑色背景和黑色文本颜色。 如何设置背景色

我试过: 主题:

<item name="android:editTextPreferenceStyle">@style/EditTextAppTheme</item>

在过去的几天里,我也一直在努力解决这个问题。我发现所有的
EditTextPrefence
扩展都是
AlertDialog
EditText
。因此,如果您可以在主题中设置这两种样式,您将在
EditTextPreference
中找到您要查找的结果。以下是我的工作内容:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">

<style name="LightTheme" parent="android:Theme.Light">
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">@color/greyscale2</item>
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:textViewStyle">@style/LightTextView</item>
    <item name="android:buttonStyle">@style/LightButton</item>
    <item name="android:editTextStyle">@style/LightEditText</item>
    <item name="android:alertDialogTheme">@style/LightDialog</item>
    <item name="android:dialogPreferenceStyle">@style/LightDialog</item>
    <item name="android:colorBackground">@color/greyscale2</item>
    <item name="android:colorBackgroundCacheHint">@color/greyscale1</item>
</style>

<!-- TextView -->
<style name="LightTextView" parent="android:Widget.TextView">
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:background">@android:color/transparent</item>
</style>

<!-- Button -->
<style name="LightButton" parent="android:Widget.Button">
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:background">@drawable/light_button_background</item>
    <item name="android:gravity">center_vertical|center_horizontal</item>
</style>

<style name="LightCheckBox" parent="android:Widget.CompoundButton.CheckBox">
    <item name="android:background">@color/greyscale2</item>
</style>

<style name="LightEditText" parent="android:style/Widget.EditText">
    <item name="android:background">@color/greyscale1</item>
    <item name="android:editTextBackground">@color/greyscale2</item>
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:button">@style/DarkButton</item>
    <item name="android:inputType">number</item>
</style>

<style name="LightDialog" parent="@android:style/Theme.Dialog">
    <item name="android:background">@color/greyscale2</item>
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:textViewStyle">@style/LightTextView</item>
    <item name="android:buttonStyle">@style/LightButton</item>
    <item name="android:divider">@color/greyscale14</item>
</style>

真的
@颜色/灰色标尺2
@颜色/灰色标尺16
@样式/LightTextView
@样式/灯光按钮
@样式/光编辑文本
@样式/灯光对话框
@样式/灯光对话框
@颜色/灰色标尺2
@颜色/灰色刻度1
@颜色/灰色标尺16
@android:彩色/透明
@颜色/灰色标尺16
@可绘制/灯光按钮背景
中心|垂直|中心|水平
@颜色/灰色标尺2
@颜色/灰色刻度1
@颜色/灰色标尺2
@颜色/灰色标尺16
@样式/暗色按钮
数
@颜色/灰色标尺2
@颜色/灰色标尺16
@样式/LightTextView
@样式/灯光按钮
@颜色/灰色刻度14

注意

@我的基本主题中的style/LightDialog
属性。我找到了可设置样式的资源,更具体地说是AlertDiaog(注意:这些资源也可以在您计算机上的SDK目录中找到)

我希望这至少能引导你朝着正确的方向前进,我一直在努力解决这个问题(我在应用程序中的第一个主题)。快乐编码

我认为您观察到的效果是姜饼模拟器中的一个bug。
更改活动主题并重新启动模拟器后,EditTextPreference显示如上所示。

首先扩展
EditTextPreference
并覆盖
onPrepareDialogBuilder
,反转以下版本的背景色:

public class CustomEditTextPreference extends EditTextPreference {

    /**
     * Prepares the dialog builder to be shown when the preference is clicked.
     * Use this to set custom properties on the dialog.
     * <p>
     * Do not {@link AlertDialog.Builder#create()} or
     * {@link AlertDialog.Builder#show()}.
     */
    @Override
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
        builder.setInverseBackgroundForced(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB);
    }
}


当我切换到API v21 AppCompat时,我就遇到了这个问题(我想——它以前至少可以正常工作)。 我的解决方案是在我的主题中明确定义android:editTextStyle的样式-以下是我的完整styles.xml:


@android:style/Widget.EditText

结果是一个editText,看起来和@Jesse Webb的截图一样。

android:alertDialogTheme
为我做的!我只是想给按下时出现的小子对话框设置样式,例如,
EditTextPreference
。谢谢
<item name="android:editTextPreferenceStyle">@style/EditTextPreferences</item>
error: Error retrieving parent for item: No resource found that matches the given name 'android:Preference.DeviceDefault.DialogPreference.EditTextPreference'.
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">

<style name="LightTheme" parent="android:Theme.Light">
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">@color/greyscale2</item>
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:textViewStyle">@style/LightTextView</item>
    <item name="android:buttonStyle">@style/LightButton</item>
    <item name="android:editTextStyle">@style/LightEditText</item>
    <item name="android:alertDialogTheme">@style/LightDialog</item>
    <item name="android:dialogPreferenceStyle">@style/LightDialog</item>
    <item name="android:colorBackground">@color/greyscale2</item>
    <item name="android:colorBackgroundCacheHint">@color/greyscale1</item>
</style>

<!-- TextView -->
<style name="LightTextView" parent="android:Widget.TextView">
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:background">@android:color/transparent</item>
</style>

<!-- Button -->
<style name="LightButton" parent="android:Widget.Button">
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:background">@drawable/light_button_background</item>
    <item name="android:gravity">center_vertical|center_horizontal</item>
</style>

<style name="LightCheckBox" parent="android:Widget.CompoundButton.CheckBox">
    <item name="android:background">@color/greyscale2</item>
</style>

<style name="LightEditText" parent="android:style/Widget.EditText">
    <item name="android:background">@color/greyscale1</item>
    <item name="android:editTextBackground">@color/greyscale2</item>
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:button">@style/DarkButton</item>
    <item name="android:inputType">number</item>
</style>

<style name="LightDialog" parent="@android:style/Theme.Dialog">
    <item name="android:background">@color/greyscale2</item>
    <item name="android:textColor">@color/greyscale16</item>
    <item name="android:textViewStyle">@style/LightTextView</item>
    <item name="android:buttonStyle">@style/LightButton</item>
    <item name="android:divider">@color/greyscale14</item>
</style>
public class CustomEditTextPreference extends EditTextPreference {

    /**
     * Prepares the dialog builder to be shown when the preference is clicked.
     * Use this to set custom properties on the dialog.
     * <p>
     * Do not {@link AlertDialog.Builder#create()} or
     * {@link AlertDialog.Builder#show()}.
     */
    @Override
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
        builder.setInverseBackgroundForced(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB);
    }
}
<EditTextPreference ... />
<your.package.CustomEditTextPreference ... />