プログラムでEditText's
カーソルの色を変更するにはどうすればよいですか?
Android 4.0 以降では、カーソルの色は白です。EditText
背景も白だと見えなくなります。
プログラムでEditText's
カーソルの色を変更するにはどうすればよいですか?
Android 4.0 以降では、カーソルの色は白です。EditText
背景も白だと見えなくなります。
EditTextプロパティには、属性がありますandroid:textCursorDrawable
次に、@nullに設定します。
android:textCursorDrawable="@null"
これで、EditTextカーソルはEditTextTextColorと同じになります。
SetEditTextカーソルカラーからの参照
これを修正する方法を見つけました。これは最善の解決策ではありませんが、機能します。
残念ながら、カーソルの色には静的な色しか使用できません。
まず、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 ビューができました。実行時にカーソルを変更できるように、誰かが私のソリューションを改善できるかもしれません。
これは、@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>
styles.xml
AppCompat-v7の使用についてはどうですか?
<item name="colorControlNormal">@color/accentColor</item>
<item name="colorControlActivated">@color/accentColor</item>
<item name="colorControlHighlight">@color/accentColor</item>
私にとってはうまくいきます(この例は単純化されています)。
android:textCursorDrawable
属性を に設定すると、カーソルの色として が@null
使用されます。android:textColor
属性textCursorDrawable
は API レベル 12 以降で使用できます...
ありがとう...
したがって、これが最終バージョンです。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 でテストしました。