Set EditText cursor color
我有这个问题,我在平板电脑项目中使用Android的Holo主题。 但是,我在屏幕上有一个具有白色背景的片段。 我在这个片段上添加了一个
有谁知道如何让EditText使用更暗的光标颜色? 我已经尝试将EditText的样式设置为
将
属性"textCursorDrawable"在API级别12及更高级别中可用
在布局中
1 2 3 4 5 | <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:textCursorDrawable="@drawable/color_cursor" /> |
然后创建drawable xml:color_cursor
1 2 3 4 5 | <?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属性上有一个白色光标。
似乎所有的答案都围绕着灌木丛。
在
1 | android:textCursorDrawable="@drawable/black_cursor" |
并将drawable
1 2 3 4 5 | <?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> |
如果需要,这也是创建更多样化游标的方法。
在最新的
只需像这样更改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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+ s>
更新2:我不确定它可以工作的最低Android版本。经Android版测试:
1 2 3 4 | 2.3.7 - didn't work 4.4.4 - worked 5.0 - worked 5.1 - worked |
我找到了答案:)
我将Theme的editText样式设置为:
1 | <item name="android:editTextStyle">@style/myEditText</item> |
然后我使用以下drawable来设置光标:
`
1 2 3 4 5 | <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是这里的关键。
对于需要动态设置
首先,创建你的光标drawable:
1 2 3 4 5 6 7 8 9 | <?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资源id设置为您创建的drawable(https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564">source)) :
1 2 3 4 5 6 | try { Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); f.setAccessible(true); f.set(yourEditText, R.drawable.cursor); } catch (Exception ignored) { } |
要仅更改默认光标drawable的颜色,可以使用以下方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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) { } } |
晚了,这是我的回答,
这适用于那些不想在父主题中更改
This answer demos how to change ......
Bottom line color Cursor color Cursor pointer color (I used my custom image).......... of EditText using style applied to the Activity theme.
1 2 3 4 | <android.support.v7.widget.AppCompatEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hey" /> |
例:
1 2 3 4 5 6 7 8 9 | <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(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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主题中设置此样式。
示例:
在您的活动中,您有一个主题,将此自定义
1 2 3 4 | <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Your Theme data --> <item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this </style> |
1 2 3 4 5 6 | 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:
1 2 3 4 5 | <?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
1 2 3 4 5 | <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
1 2 3 4 | <?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并在下面添加代码行,光标将为黑色
1 2 3 4 5 6 | <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文件夹中需要这行代码
1 | <color name="color_Black">#000000</color> |
为什么这么晚发帖?对于许多头脑怪物Android来说,考虑某种形式的类别可能会很好!
@Jared Rummler的编程setCursorDrawableColor()版本适用于Android 9 Pie。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | @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); } } |
editcolor.xml
在xml文件中设置
唯一有效的答案应该是改变活动的主题:
您不应该使用
另一个简单的解决方案是转到项目文件夹中的res> values> colors.xml,并将颜色重点的值编辑为您喜欢的颜色
1 | <color name="colorAccent">#000000</color> |
上面的代码将光标更改为黑色。
用这个
机器人:textCursorDrawable ="@色/白色"
它比这更容易。
1 2 3 | <style name="MyTextStyle"> <item name="android:textCursorDrawable">#000000</item> </style> |
这适用于ICS及更高版本。我没有在其他版本中测试它。
你想要特定的颜色你必须使用AppCompatEditText然后backround设置null
适合我
1 2 3 | <android.support.v7.widget.AppCompatEditText android:background="@null" android:textCursorDrawable="@color/cursorColor"/> |
看到这个要点
这在Android中被称为
转到res - > values - > styles.xml add
1 | <item name="colorAccent">#FFFFFF</item> |
如果不存在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!-- 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的颜色,这很简单