【发布时间】:2018-10-26 08:38:52
【问题描述】:
我的问题是 - 如何多次更改 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 做什么?
是的,是我的错
我添加了显示登录捕获但里面什么都没有
我使用了一个公共字段
它没有解决我的问题,有什么不同的想法吗?
更新 2
Maulik Panchal 感谢您的帮助。 这行得通。 很抱歉,我没有注意到您在上一个代码中使用“if”来拒绝第二次更改颜色。
但是现在我看到了你的代码,我有几个问题。
您使用“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();
}
如何准确改变光标颜色?
谢谢
【问题讨论】:
-
当你按下任何一个按钮时,它会转到
catch()你能发布日志吗? -
您正在使用 EditText 的私有字段,不建议这样做...您在 editText 上的调用是否无效?更改drawable后尝试调用invalidate。
-
我更新了问题,你可以检查一下。谢谢
标签: java android android-edittext cursor