Android EditTextPreference样式

时间:2014-01-23 14:45:12

标签: java android styles android-edittext edittextpreference

在我的setings应用程序中,我使用EditTextPreference,而在Android API uder 11上,edittext字段具有黑色背景和黑色文本颜色。 我怎样才能改变EditTextPreferences的背景颜色?

我试过了: 在主题:

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

风格:

<style name="EditTextAppTheme" parent="android:Widget.EditText">
      <item name="android:background">@drawable/edit_text_holo_light</item>
      <item name="android:textColor">#000000</item>
  </style>

如果我将样式设置为:

<style name="EditTextPreferences" parent="android:Preference.DeviceDefault.DialogPreference.EditTextPreference">
      <item name="android:background">@drawable/edit_text_holo_light</item>
      <item name="android:textColor">#FF0000</item>
  </style>

主题为:

<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'.

4 个答案:

答案 0 :(得分:3)

在过去的几天里,我一直在努力解决这个问题。我发现所有EditTextPrefence扩展都是AlertDialogEditText。因此,如果您可以为主题中的两个设置样式,您将在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>

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

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

答案 1 :(得分:0)

http://i.imgur.com/zr0VUzY.jpg

我认为您观察到的效果是Gingerbread模拟器中的错误。 更改活动的主题并重新启动模拟器后,EditTextPreference如上所示。

答案 2 :(得分:0)

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

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

然后在preferences.xml全部

中替换
<EditTextPreference ... />

<your.package.CustomEditTextPreference ... />

答案 3 :(得分:0)

当我切换到API v21 AppCompat时,我遇到了这个确切的问题(我认为 - 它以前用来工作得很好)。 我的解决方案是在我的主题中明确定义android:editTextStyle的样式 - 这是我的完整styles.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">

        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
        <item name="android:editTextStyle">@android:style/Widget.EditText</item>
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

</resources>

结果是一个editText,与@Jesse Webb的截图相同。