Answers:
将android:textCursorDrawable
属性设置为会@null
导致使用android:textColor
作为光标颜色。
属性“ textCursorDrawable”在API级别12和更高版本中可用
target
> 3.2在您的清单,你可以使用它,它会被忽略更低版本
布局中
<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>
您在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
colorAccent
会更改,例如,an底部的行,EditText
但不会触及实际的光标颜色。哦,当然没有“ v21”了。
我找到了答案:)
我已经将主题的editText样式设置为:
<item name="android:editTextStyle">@style/myEditText</item>
然后,我使用了以下可绘制对象来设置光标:
`
<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
动态设置光标颜色的任何人,下面将找到两种方法来实现此目的。
首先,创建光标可绘制:
<?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设置为您创建的可绘制对象(https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564“>源代码)) :
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) {
}
}
AppCompatEditText
已经拥有了setSupportBackgroundTintList
,那么添加这样的东西会不会很简单setSupportCursorTintList
吗?
晚会晚了,这是我的答案,
这是为那些不希望更改colorAccent
其父主题但想要更改EditText
属性的人而设计的!
这个答案演示了如何改变……
- 底线颜色
- 光标颜色
- 光标指针颜色(我使用了自定义图像).....
EditText
使用应用于Activity主题的样式。
<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>
<item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this
没有效果
android:editTextSteyle
,正确的attr是editTextStyle
<item name="android:textCursorDrawable">@color/white</item>
不起作用
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和一个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样式内。当我尝试使用它时,颜色不会改变。
哇,我参加这个聚会真的很晚,但是它在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已经成为许多头怪兽!
在这里,@ Jared Rummler的程序化setCursorDrawableColor()版本适用于Android 9 Pie。
@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);
}
}
java.lang.NoSuchFieldException: No field mDrawableForCursor
在Android 9.
colorAccent
在Android中称为。
转到res-> values-> styles.xml添加
<item name="colorAccent">#FFFFFF</item>
如果不存在。
editcolor.xml
android:textCursorDrawable="@drawable/editcolor"
在xml文件中设置edittext
背景色的颜色代码
唯一有效的答案应该是更改活动的主题:
<item name="colorAccent">#000000</item>
不应使用android:textCursorDrawable
to,@null
因为如果要拖动该光标,它仅涉及光标本身,而不涉及光标下方的针脚。主题解决方案是最严肃的解决方案。
另一个简单的解决方案是转到项目文件夹中的res> values> colors.xml,然后将颜色强调的值编辑为您喜欢的颜色
<color name="colorAccent">#000000</color>
上面的代码将光标更改为黑色。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimary</item>
<item name="colorAccent">@color/colorAccent</item> -- change this one
</style>
转到styles.xml并更改颜色强调,这将影响edittext框中的光标
它甚至比这容易。
<style name="MyTextStyle">
<item name="android:textCursorDrawable">#000000</item>
</style>
这适用于ICS及更高版本。我没有在其他版本中测试过。
<!-- 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的颜色,就这么简单
在花了很多时间在Dialog中尝试所有这些技术之后,我终于有了这个想法:将主题附加到Dialog本身而不是TextInputLayout上。
<style name="AppTheme_Dialog" parent="Theme.AppCompat.Dialog">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorWhite</item>
<item name="colorAccent">@color/colorPrimary</item>
</style>
里面onCreate:
公共类myDialog扩展了Dialog {
private Activity activity;
private someVars;
public PopupFeedBack(Activity activity){
super(activity, R.style.AppTheme_Dialog);
setContentView(R.layout.myView);
....}}
欢呼:)