Установить цвет курсора EditText

у меня возникла эта проблема, когда я использую тему Холо Android в проекте планшета. Однако, у меня есть фрагмент на экране, который имеет белый фон. Я добавляю EditText компонент на этом фрагменте. Я попытался переопределить тему, установив фон голограммы.Легкие тематические ресурсы. Однако мой текстовый курсор (карат) остается белым и, следовательно, невидимым на экране (я могу заметить его слабо в поле edittext..).

кто-нибудь знает, как я могу получить EditText для использовать более темный цвет курсора? Я попытался установить стиль EditText в "@android:style/Widget.Holo.Light.EditText" без положительного результата.

15 ответов


задание до @null должно привести к использованию android:textColor как цвет курсора.

атрибут "textCursorDrawable" доступен на уровне API 12 и выше


В Структуре

<EditText  
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textCursorDrawable="@drawable/color_cursor"
    />

затем создайте drawable xml: color_cursor

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <size android:width="3dp" />
    <solid android:color="#FFFFFF"  />
</shape>

у вас есть курсор белого цвета на свойстве EditText.


похоже, что все ответы идут вокруг кустов.

в своем EditText, воспользуйтесь свойством:

android:textCursorDrawable="@drawable/black_cursor"

и добавить drawable black_cursor.xml к вашим ресурсам, следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <size android:width="1dp" />
    <solid android:color="#000000"/>
</shape>

Это также способ для создания более разнообразных курсоров, если вам нужно.


существует новый способ изменить цвет курсора в latest Appcompact v21
Просто изменить colorAccent в стиле вроде этого:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Set theme colors from http://www.google.com/design/spec/style/color.html#color-color-palette-->

    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">#088FC9</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">#088FC9</item>

    <!-- colorAccent is used as the default value for colorControlActivated
         which is used to tint widgets -->
    <!-- THIS IS WHAT YOU'RE LOOKING FOR -->
    <item name="colorAccent">#0091BC</item> 
</style>

затем применить этот стиль на тему приложения или деятельности.

обновление: этот способ работает только на API 21+
обновление 2: я не уверен, что минимальная версия android, что она может работать.
протестировано android версии:

2.3.7 - didn't work
4.4.4 - worked
5.0 - worked
5.1 - worked

Я нашел ответ :)

Я установил стиль editText темы в:

<item name="android:editTextStyle">@style/myEditText</item>

затем я использовал следующий drawable для установки курсора:

`

<style name="myEditText" parent="@android:style/Widget.Holo.Light.EditText">
    <item name="android:background">@android:drawable/editbox_background_normal</item>
    <item name="android:textCursorDrawable">@android:drawable/my_cursor_drawable</item>
    <item name="android:height">40sp</item>
</style>

`

android: textCursorDrawable здесь ключевое.


для всех, кто должен установить EditText цвет курсора динамически, ниже вы найдете два способа достичь этого.


во-первых, создайте курсор drawable:

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

    <solid android:color="#ff000000" />

    <size android:width="1dp" />

</shape>

установите идентификатор ресурса drawable курсора на созданный вами drawable(https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564">source)):

try {
    Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
    f.setAccessible(true);
    f.set(yourEditText, R.drawable.cursor);
} catch (Exception ignored) {
}

чтобы просто изменить цвет курсора по умолчанию drawable, вы можете использовать следующий метод:

public static void setCursorDrawableColor(EditText editText, int color) {
    try {
        Field fCursorDrawableRes = 
            TextView.class.getDeclaredField("mCursorDrawableRes");
        fCursorDrawableRes.setAccessible(true);
        int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);
        Field fEditor = TextView.class.getDeclaredField("mEditor");
        fEditor.setAccessible(true);
        Object editor = fEditor.get(editText);
        Class<?> clazz = editor.getClass();
        Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
        fCursorDrawable.setAccessible(true);

        Drawable[] drawables = new Drawable[2];
        Resources res = editText.getContext().getResources();
        drawables[0] = res.getDrawable(mCursorDrawableRes);
        drawables[1] = res.getDrawable(mCursorDrawableRes);
        drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
        drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
        fCursorDrawable.set(editor, drawables);
    } catch (final Throwable ignored) {
    }
}

опоздал на вечеринку,вот мой ответ,

это для людей, которые не хотите изменить colorAccent в их родительской теме, но хочет изменить EditText атрибуты!

этот ответ демонстрирует, как изменить ......

  1. цвет нижней строки
  2. цвет Курсора
  3. цвет указателя Курсора (я использовал свое собственное изображение).......... из EditText использование стиля деятельности тема.

enter image description here

<android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hey" />

пример:

<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText">
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">#8AFFFFFF</item>
    <item name="android:background">@drawable/edit_text_background</item> // background (bottom line at this case)
    <item name="android:textCursorDrawable">@color/white</item>  // Cursor
    <item name="android:textSelectHandle">@drawable/my_white_icon</item> // For pointer normal state and copy text state
    <item name="android:textSelectHandleLeft">@drawable/my_white_icon</item>
    <item name="android:textSelectHandleRight">@drawable/my_white_icon</item>
</style>

Теперь создайте drawable (edit_text_background) добавить xml-ресурс для фона!Вы можете настроить, как вы хотите!

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="0dp"
        android:left="-3dp"   
        android:right="-3dp"
        android:top="-3dp">

        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="@color/white"/>
        </shape>
    </item>
    </layer-list>

теперь, как вы установили этот стиль в вашей теме деятельности.

пример :

в вашей деятельности у вас есть тема,задайте этот обычай editText темы что.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Your Theme data -->
    <item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this
</style>

Edittext cursor color you want changes your color.
   <EditText  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textCursorDrawable="@drawable/color_cursor"
    />

затем создайте drawalble xml:color_cursor

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <size android:width="3dp" />
    <solid android:color="#FFFFFF"  />
</shape>

для меня я изменил цвета AppTheme и значения.в XML

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorControlNormal">@color/yellow</item>
    <item name="colorAccent">@color/yellow</item>
</style>

здесь цвета.в XML

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#B7EC2A</color>
</resources>

Я достал атрибут android: textCursorDrawable для @null, который я поместил внутри стиля editText. Когда я пытался использовать это, цвета не менялись.


Wow я действительно опоздал на эту вечеринку, но у нее была активность 17 дней назад Нам нужно рассмотреть вопрос о публикации какой версии Android мы используем для ответа, так как теперь этот ответ работает с Android 2.1 и выше Перейдите в RES / VALUES / STYLES и добавьте строки кода ниже, и ваш курсор будет черным

    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!--<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">-->
    <!-- Customize your theme here. -->
    <item name="colorControlActivated">@color/color_Black</item>
    <!--Sets COLOR for the Cursor in EditText  -->
</style>

вам понадобится эта строка кода в папке RES/COLOR

<color name="color_Black">#000000</color>

почему пост так поздно ? Было бы неплохо рассмотреть некоторые формы категории для многих возглавил монстр Android стал!


editcolor.в XML

android:textCursorDrawable="@drawable/editcolor"

в xml-файле установлен цветовой код edittext цвет фона


Это еще проще.

<style name="MyTextStyle">
    <item name="android:textCursorDrawable">#000000</item>
</style>

это работает в ICS и за его пределами. Я не тестировал его в других версиях.


использовать

android: textCursorDrawable= "@color / white"


единственным правильным ответом должно быть изменение темы мероприятия: <item name="colorAccent">#000000</item> Вы не должны использовать android:textCursorDrawable to @null потому что это касается только самого курсора, но не пин под курсором при перетаскивании курсора. Тематическое решение-самое серьезное.


<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">#36f0ff</item>
    <item name="colorPrimaryDark">#007781</item>
    <item name="colorAccent">#000</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

изменить цвет colorAccent в стилях.xm, это просто