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

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

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

Ответ 1

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

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

Ответ 2

В макете

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

Затем создайте отрисовываемый 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.

Ответ 3

Кажется, что все ответы идут вокруг кустов.

В EditText используйте свойство:

android:textCursorDrawable="@drawable/black_cursor"

и добавьте на свои ресурсы 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>

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

Ответ 4

Существует новый способ изменения цвета курсора в последних 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

Ответ 5

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

Я установил стиль 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 - это ключ.

Ответ 6

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


Сначала создайте свой курсор для рисования:

<?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>

Задайте идентификатор ресурса с возможностью перемещения курсора, который вы создали (https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564" > источник)):

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

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

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

Ответ 7

Поздно к вечеринке, вот мой ответ,

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

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

  • Цвет нижней линии
  • Цвет курсора
  • Цвет указателя курсора (я использовал свой собственный образ).......... из EditText, используя стиль, применяемый к теме "Активность".

введите описание изображения здесь

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

Ответ 8

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>

Ответ 9

Для меня я изменил как AppTheme, так и значение colors.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. Когда я попытался использовать это, цвета не изменились бы.

Ответ 10

Ничего себе, я очень опаздываю на эту вечеринку, но у нее была активность 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!

Ответ 11

Здесь @Jared Rummler Programatic setCursorDrawableColor() версия адаптирована для работы также на Android 9 Pie.

@SuppressWarnings({"JavaReflectionMemberAccess", "deprecation"})
public static void setCursorDrawableColor(EditText editText, int color) {

    try {
        Field cursorDrawableResField = TextView.class.getDeclaredField("mCursorDrawableRes");
        cursorDrawableResField.setAccessible(true);
        int cursorDrawableRes = cursorDrawableResField.getInt(editText);
        Field editorField = TextView.class.getDeclaredField("mEditor");
        editorField.setAccessible(true);
        Object editor = editorField.get(editText);
        Class<?> clazz = editor.getClass();
        Resources res = editText.getContext().getResources();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            Field drawableForCursorField = clazz.getDeclaredField("mDrawableForCursor");
            drawableForCursorField.setAccessible(true);
            Drawable drawable = res.getDrawable(cursorDrawableRes);
            drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
            drawableForCursorField.set(editor, drawable);
        } else {
            Field cursorDrawableField = clazz.getDeclaredField("mCursorDrawable");
            cursorDrawableField.setAccessible(true);
            Drawable[] drawables = new Drawable[2];
            drawables[0] = res.getDrawable(cursorDrawableRes);
            drawables[1] = res.getDrawable(cursorDrawableRes);
            drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
            drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
            cursorDrawableField.set(editor, drawables);
        }
    } catch (Throwable t) {
        Log.w(TAG, t);
    }
}

Ответ 12

editcolor.xml

android:textCursorDrawable="@drawable/editcolor"

В xml файле задан цветовой код edittext цвета фона

Ответ 13

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

Ответ 14

Другим простым решением было бы перейти к res> values> colors.xml в папке вашего проекта и отредактировать значение цветового акцента до цвета, который вы предпочитаете

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

Код выше меняет ваш курсор на черный.

Ответ 15

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

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

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

Ответ 16

используйте этот

Android: textCursorDrawable = "@цвет/белый"

Ответ 17

Вы хотите специфический цвет вы должны использовать AppCompatEditText тогда Backround набор нуль

работает для меня

<android.support.v7.widget.AppCompatEditText
    android:background="@null"
    android:textCursorDrawable="@color/cursorColor"/>

Смотрите эту суть

Ответ 18

<!-- 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" />

измените цвет этого цвета в стилях .xm, что он просто

Ответ 19

это называется colorAccent в Android.

перейти к res → values → styles.xml добавить

<item name="colorAccent">#FFFFFF</item>

если не существует

Ответ 20

При использовании стиля и реализации

colorControlActivate

заменить его значение другим, что цвет/белый.

Ответ 21

Вы можете использовать код ниже в макете

android:textCursorDrawable="@color/red"
        android:textColor="@color/black