У меня вопрос - Как изменить цвет курсора в EditText более одного раза.
У меня есть editText и два btn для изменения цвета курсора
public class MainActivity extends AppCompatActivity {
public EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.edit_text);
editText.setText(Html.fromHtml("5+6+3<sup>2</sup>+6"));
}
public void btn1(View v){
try {
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
f.set(editText, R.drawable.cursor);
} catch (Exception e) {
Log.e("ALERT", "exception: " + e.getMessage());
Log.e("ALERT", "exception: " + e.toString());
e.printStackTrace();
}
editText.invalidate();
}
public void btn2(View v){
try {
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
f.set(editText, R.drawable.cursor_exponent);
} catch (Exception e) {
Log.e("ALERT", "exception: " + e.getMessage());
Log.e("ALERT", "exception: " + e.toString());
e.printStackTrace();
}
editText.invalidate();
}
}
Когда я запускаю приложениеи нажмите btn1, произойдет смена цвета.
Но после того, как я нажму btn2, цвет не изменится.
Если закрыть приложение и запустить снова, а затем нажать кнопку btn2, цвет меняется.
Но после, если я нажму btn1, цвет не изменится.
Как это исправить?
Спасибо.
ОБНОВЛЕНО
Я обновил код в вопросе
1.1.Используется другое поле f
1.2.Мне нужно использовать тот же EditText, потому что этот btn должен изменить курсор в том же тексте редактирования
Для чего мне нужно использовать View v?
Да, это моя ошибка
Я добавил показывать в журнале catch, новнутри ничего не было
И я использовал открытое поле
Это не решило мою проблему, есть другая идея?
ОБНОВЛЕНО 2
Маулик Панчал спасибо за помощь.Это работает.Извините, я не заметил, что в вашем последнем коде вы используете "если" для второго изменения цвета.
Но теперь я вижу ваш код и у меня есть несколько вопросов.
Вы используете "editText.getBackground().mutate().setColorFilter(...);
" для изменения цвета фона.
Я хочу изменить цвет курсора, и я посмотрел и не нашел опции в editText для изменения цвета курсора.
И если я использую свой старыйКод детали для изменения цвета курсора работает только в первый раз
try {
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
f.set(editText, R.drawable.cursor_exponent);
} catch (Exception e) {
Log.e("ALERT", "exception: " + e.getMessage());
Log.e("ALERT", "exception: " + e.toString());
e.printStackTrace();
}
Как точно изменить цвет курсора?
Спасибо