设置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
属性的人!
这个答案演示了如何改变……
- 底线颜色
- 光标颜色
- 游标指针颜色(我用我的自定义图像)……….使用应用于活动主题的样式的
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 = “@色/白色”