そこで、 Holo Colors Generator と Action Bar Style Generator でHoloテーマのスタイルを自分の色に変更しました。しかし、編集テキスト内のテキストを選択すると、選択した位置の「マーカー」はまだ青色のままです。どうすれば変更できますか?
ここでの最悪の部分は、このアイテムの「名前」と、それがテーマ内でどのように呼ばれるかを見つけることでした。そこで、Android SDKフォルダー内のすべてのドローアブルを調べて、最終的に「text_select_handle_middle」、「text_select_handle_left」、「text_select_handle_right」という名前のドローアブルを見つけました。
したがって、解決策は簡単です。カスタマイズされたデザイン/色のこれらのドローアブルをドローアブルフォルダーに追加し、次のようにテーマスタイル定義に追加します。
<style name="MyCustomTheme" parent="@style/MyNotSoCustomTheme">
<item name="Android:textSelectHandle">@drawable/text_select_handle_middle</item>
<item name="Android:textSelectHandleLeft">@drawable/text_select_handle_left</item>
<item name="Android:textSelectHandleRight">@drawable/text_select_handle_right</item>
</style>
コードからそれを行う方法:
try {
final Field fEditor = TextView.class.getDeclaredField("mEditor");
fEditor.setAccessible(true);
final Object editor = fEditor.get(editText);
final Field fSelectHandleLeft = editor.getClass().getDeclaredField("mSelectHandleLeft");
final Field fSelectHandleRight =
editor.getClass().getDeclaredField("mSelectHandleRight");
final Field fSelectHandleCenter =
editor.getClass().getDeclaredField("mSelectHandleCenter");
fSelectHandleLeft.setAccessible(true);
fSelectHandleRight.setAccessible(true);
fSelectHandleCenter.setAccessible(true);
final Resources res = context.getResources();
fSelectHandleLeft.set(editor, res.getDrawable(R.drawable.text_select_handle_left));
fSelectHandleRight.set(editor, res.getDrawable(R.drawable.text_select_handle_right));
fSelectHandleCenter.set(editor, res.getDrawable(R.drawable.text_select_handle_middle));
} catch (final Exception ignored) {
}
これは本当に遅いと思いますが、ハンドルの色を変更するだけの場合は、styles.xmlファイルに以下を追加するだけです。
<style name="ColoredHandleTheme">
<item name="colorControlActivated">@color/colorYouWant</item>
</style>
次に、影響を与えたいEditText
を保持しているアクティビティにテーマを設定します。
または、アプリ全体に設定する場合は、次の操作を実行できます。
<style name="ColoredHandleThemeForWholeApp">
<item name="colorAccent">@color/colorYouWant</item>
</style>
そして、アプリ全体にそのテーマを設定します。
問題が解決しました!
選択したハンドルの色を変更するには、アプリのテーマでアクティブになっている色を上書きする必要があります。
<style name="MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="Android:colorControlActivated">@color/customActivatedColor</item>
</style>
これらの属性は http://androiddrawables.com/Other.html で確認できます。
たとえば、values /styles.xmlを変更します。
<style name="AppTheme.Cursor" parent="AppTheme">
<item name="colorAccent">@color/cursor</item>
</style>
ここで、@ color/cursorはvalues/color.xmlに追加されます。その後、スタイルをアクティビティに適用します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme_Cursor);
...
他の解決策については、 EditTextポインタの色(カーソルではない)を変更する方法 にアクセスしてください。