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


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

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

15 429

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>

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

есть новый способ изменить цвет курсора в последнем 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 resource id в 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. Когда я попытался использовать это, цвета не изменятся.

Вау я очень поздно на эту вечеринку, но у нее была активность 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 в стилях.Хм, вот это просто