Изменить цвет курсора edittext

Как я могу изменить цвет курсора EditText's ?

В Android 4.0 и выше цвет курсора белый. И если фон EditText также белый, он становится невидимым.

Solutions Collecting From Web of "Изменить цвет курсора edittext"

В свойствах EditText имеется атрибут android:textCursorDrawable

Теперь установите значение @null как,

android:textCursorDrawable="@null"

Итак, теперь ваш курсор EditText совпадает с вашим TextTolor EditText.

Ссылка из набора цвета курсора 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> 

Затем я определяю образец EditText в макетах.

 <?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textCursorDrawable="@drawable/blackpipe" > </EditText> 

Когда я хочу создать EditText во время выполнения, я использую это:

 AttributeSet editText30AttributeSet = null; int res = getResources().getIdentifier("edit30", "layout", getPackageName());//edit30 is EditText layout XmlPullParser parser = getResources().getXml(res); int state=0; do { try { state = parser.next(); } catch (Exception e1) { e1.printStackTrace(); } if (state == XmlPullParser.START_TAG) { if (parser.getName().equals("EditText")) { editText30AttributeSet = Xml.asAttributeSet(parser); break; } } } while(state != XmlPullParser.END_DOCUMENT); EditText view = new EditText(getContext(),editText30AttributeSet); 

Теперь у вас есть вид EditText с черным курсором. Может быть, кто-то может улучшить мое решение, чтобы курсор можно было изменить во время выполнения.

Вот, что я думаю, лучшее решение, чем опубликовал @Adem.

Ява:

 try { // https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564 Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); f.setAccessible(true); f.set(yourEditText, R.drawable.cursor); } catch (Exception ignored) { } 

XML:

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

Как насчет styles.xml с помощью AppCompat-v7?

 <item name="colorControlNormal">@color/accentColor</item> <item name="colorControlActivated">@color/accentColor</item> <item name="colorControlHighlight">@color/accentColor</item> 

Работает для меня (этот пример упрощен).

Улучшение ответа Джареда Раммера

Ява:

 try { // https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564 Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); f.setAccessible(true); f.set(yourEditText, R.drawable.cursor); } catch (Exception ignored) { } 

Создать custom_cursor.xml в папке res / 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" /> 

XML:

 <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textCursorDrawable="@drawable/custom_cursor" > </EditText> 

Итак, вот финальная версия – не нужен XML и работает как @null, но программно:

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

Единственная проблема заключается в том, что он может перестать работать в один прекрасный день с новой версией Android.

PS Я тестировал его на 4.1.2 до 5.1.

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

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

Благодаря…