设置EditText光标颜色

时间:2011-08-30 03:43:52

标签: android android-edittext android-styles

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

有谁知道如何让EditText使用更暗的光标颜色?我已经尝试将EditText的样式设置为"@android:style/Widget.Holo.Light.EditText"而没有正面结果。

25 个答案:

答案 0 :(得分:1045)

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

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

答案 1 :(得分:408)

布局

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

然后创建drawable 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属性上有一个白色光标。

答案 2 :(得分:57)

似乎所有的答案都围绕着灌木丛。

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>

如果需要,这也是创建更多样化游标的方法。

答案 3 :(得分:40)

在最新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

答案 4 :(得分:36)

我找到了答案:)

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

答案 5 :(得分:23)

对于需要动态设置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>

将光标drawable资源ID设置为您创建的drawable(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) {
}

要仅更改默认光标drawable的颜色,可以使用以下方法:

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) {
    }
}

答案 6 :(得分:10)

晚会,这是我的答案,

这适用于希望更改其父主题中的colorAccent但希望更改EditText属性的人员。

  

这个答案演示如何改变......

     
      
  1. 底线颜色
  2.   
  3. 光标颜色
  4.   
  5. 光标指针颜色(我使用自定义图像).......... EditText使用应用于活动主题的样式。
  6.   

enter image description here

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

现在,您已在Activity主题中设置此样式。

示例:

在您的活动中,您有一个主题,请将此自定义editText主题设置为该主题。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Your Theme data -->
    <item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this
</style>

答案 7 :(得分:8)

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>

答案 8 :(得分:7)

对我来说,我修改了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样式中。当我尝试使用它时,颜色不会改变。

答案 9 :(得分:4)

哇我真的很晚才参加这个派对,但是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来说,考虑某种形式的类别可能会很好!

答案 10 :(得分:3)

editcolor.xml

android:textCursorDrawable="@drawable/editcolor"

在xml文件中设置颜色代码edittext背景颜色

答案 11 :(得分:2)

我们可以按以下方式在材料主题中进行:

<style name="Theme.App" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    ...
    <item name="android:colorControlNormal">#ff0000</item>
    <item name="android:colorControlActivated">#ff0000</item>
    <item name="android:colorControlHighlight">#ff0000</item>
    ...
</style>

如果您还想更改复选框和单选颜色,请添加以下行:

<item name="colorAccent">#ff0000</item>

我已经在 Android API 21+ 中测试过

答案 12 :(得分:2)

<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并更改颜色强调,这将从编辑文本框中影响光标

答案 13 :(得分:2)

这里@Jared Rummler的程序化setCursorDrawableColor()版本适用于Android 9 Pie。

<meta property="og:title" content="Love.jpg" />

答案 14 :(得分:2)

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

答案 15 :(得分:1)

您是否要使用特定颜色,必须使用 AppCompatEditText ,然后将背景设置为 null

为我工作

InvoiceNum

请参见this gist

答案 16 :(得分:1)

另一种简单的解决办法是去水库>值> colors.xml在项目文件夹和编辑的颜色口音你喜欢<颜色/ p>的值

<color name="colorAccent">#000000</color>

上面的代码将光标更改为黑色。

答案 17 :(得分:1)

使用此

机器人:textCursorDrawable =&#34; @色/白色&#34;

答案 18 :(得分:1)

花了很多时间在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扩展了对话框{

private Activity activity;
private someVars;

public PopupFeedBack(Activity activity){
    super(activity, R.style.AppTheme_Dialog);
    setContentView(R.layout.myView);
    ....}}

欢呼:)

答案 19 :(得分:1)

在当前的“活动” /“片段” /“对话框”中,请注意您的colorAccent(在“样式...”中定义;;) 光标颜色与此有关。

答案 20 :(得分:1)

它比这更容易。

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

这适用于ICS及更高版本。我没有在其他版本中测试过它。

答案 21 :(得分:0)

在Android中称为colorAccent

转到res->值-> styles.xml添加

<item name="colorAccent">#FFFFFF</item>

如果不存在。

答案 22 :(得分:0)

如果使用样式并实现

  

colorControlActivate

替换颜色/白色以外的其他值。

答案 23 :(得分:0)

您可以在布局中使用以下代码

android:textCursorDrawable="@color/red"
        android:textColor="@color/black

答案 24 :(得分:0)

<!-- 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的颜色,这很简单