设置EditText光标颜色

我有这个问题,我在平板电脑项目上使用Android的Holo主题。 不过,我在屏幕上有一个白色背景的片段。 我在这个片段上添加一个EditText组件。 我试图通过设置Holo.Light主题资源的背景来覆盖主题。 但是,我的文本光标(克拉)保持白色,因此,在屏幕上不可见(我可以在edittext字段中微弱地发现它)。

有谁知道我怎么可以让EditText使用更深的光标颜色? 我已经尝试将EditText的样式设置为"@android:style/Widget.Holo.Light.EditText" ,但没有正面结果。

android:textCursorDrawable属性设置为@null将导致使用android:textColor作为游标颜色。

属性“textCursorDrawable”在API级别12和更高版本中可用

在布局

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

然后创build可缩放的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" 

并将可绘制的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> 

如果需要,这也是创build更多不同游标的方法。

我find了答案:)

我已经将主题的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是这里的关键。

在最新的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版本。
testing通过android版本:

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

对于任何需要dynamic设置EditText光标颜色的人,在下面你会find两种方法来实现这一点。


首先,创build可绘制的光标:

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

将光标可绘制资源ID设置为您创build的绘图(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) { } 

要改变可绘制的默认光标的颜色,可以使用以下方法:

 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

在这里输入图像描述

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

现在创build一个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> 

现在,您已经在Activity主题中设置了这种风格。

例如:

在你的活动中你有一个主题,设置这个自定义的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" /> 

然后创build可缩放的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和一个值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> 

这是colors.xml

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

我拿出了android:textCursorDrawable属性@null,我把它放在editText样式中。 当我尝试使用这个,颜色不会改变。

editcolor.xml

android:textCursorDrawable="@drawable/editcolor"

在xml文件中设置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可能已经成为众多怪物的头号考虑某些forms的分类可能是很好的!

它比这更容易。

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

这在ICS及其以后的工作。 我没有在其他版本中testing过。

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

在styles.xm中改变colorAccent的颜色,这很简单

唯一有效的答案应该是改变活动的主题: <item name="colorAccent">#000000</item>你不应该使用android:textCursorDrawable@null因为这只涉及游标本身,而不涉及pin如果要拖动光标,则在光标下方。 主题解决scheme是最严重的解决scheme。

用这个

机器人:textCursorDrawable = “@色/白色”