我的问题是-如何多次更改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必须在同一edittext中更改光标
我需要使用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();
}
如何准确更改光标的颜色?
谢谢
答案 0 :(得分:0)
(我更新了您的问题,使其更加清楚)。
您犯了一些错误:
尝试调整它,让我们知道它是否可以解决您的问题。
答案 1 :(得分:0)
我尝试按照以下方法解决您的问题:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText editText;
Button btnRed, btnGreen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.et);
btnGreen = findViewById(R.id.green);
btnRed = findViewById(R.id.red);
btnRed.setOnClickListener(this);
btnGreen.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.red:
editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_blue_light), PorterDuff.Mode.SRC_ATOP);
break;
case R.id.green:
editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_green_dark), PorterDuff.Mode.SRC_ATOP);
break;
}
}
}
Update2解决方案:-
您可以通过以下代码更改光标并在文本下方加下划线。
首先在style.xml部分中创建一种样式:
<style name="AppTheme2" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorAccent">your color</item>
</style>
在此之后,只需在您的EditText中添加以下行即可:
android:theme="@style/AppTheme2"
这是您的解决方案。谢谢:)