74

プログラムでEditText's カーソルの色を変更するにはどうすればよいですか?

Android 4.0 以降では、カーソルの色は白です。EditText背景も白だと見えなくなります。

4

8 に答える 8

122

EditTextプロパティには、属性がありますandroid:textCursorDrawable

次に、@nullに設定します。

android:textCursorDrawable="@null"

これで、EditTextカーソルはEditTextTextColorと同じになります。

SetEditTextカーソルカラーからの参照

于 2012-07-25T12:04:30.067 に答える
30

これを修正する方法を見つけました。これは最善の解決策ではありませんが、機能します。

残念ながら、カーソルの色には静的な色しか使用できません。

まず、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>

次に、サンプルの EditText をレイアウトで定義します。

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textCursorDrawable="@drawable/blackpipe"
         >
    </EditText>

実行時に EditText を作成したい場合は、これを使用します。

AttributeSet editText30AttributeSet = null;
int res = getResources().getIdentifier("edit30", "layout", getPackageName());//edit30 is EditText layout
XmlPullParser parser = getResources().getXml(res);
int state=0;
do {
    try {
        state = parser.next();
    } catch (Exception e1) {
        e1.printStackTrace();
    }       
    if (state == XmlPullParser.START_TAG) {
        if (parser.getName().equals("EditText")) {
            editText30AttributeSet = Xml.asAttributeSet(parser);
            break;
        }
    }
} while(state != XmlPullParser.END_DOCUMENT);
EditText view = new EditText(getContext(),editText30AttributeSet);

これで、黒いカーソルを持つ EditText ビューができました。実行時にカーソルを変更できるように、誰かが私のソリューションを改善できるかもしれません。

于 2013-10-03T09:01:23.923 に答える
17

これは、@Ademが投稿したものよりも優れたソリューションだと思います。

ジャワ:

try {
    // https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564
    Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
    f.setAccessible(true);
    f.set(yourEditText, R.drawable.cursor);
} catch (Exception ignored) {
}

XML:

<?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>
于 2014-10-24T07:27:31.863 に答える
7

styles.xmlAppCompat-v7の使用についてはどうですか?

<item name="colorControlNormal">@color/accentColor</item>
<item name="colorControlActivated">@color/accentColor</item>
<item name="colorControlHighlight">@color/accentColor</item>

私にとってはうまくいきます(この例は単純化されています)。

于 2015-04-16T15:00:16.667 に答える
2

android:textCursorDrawable属性を に設定すると、カーソルの色として が@null使用されます。android:textColor

属性textCursorDrawableは API レベル 12 以降で使用できます...

ありがとう...

于 2015-03-09T09:59:59.053 に答える
1

したがって、これが最終バージョンです。XML は必要なく、@null として機能しますが、プログラムによって機能します。

try {
    Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
    f.setAccessible(true);
    f.set((TextView)yourEditText, 0);
} catch (Exception ignored) {
}

唯一の問題は、新しいバージョンの Android では、ある日、動作しなくなる可能性があることです。

PS 4.1.2 から 5.1 でテストしました。

于 2015-06-30T10:38:37.973 に答える