我一直在使用下面的代码,我从另一个问题中分成两行,以编程方式编辑颜色。
Changing tint color of Android EditText programmatically
((EditText) row1.getVirtualChildAt(i))
以下代码是我在上面一行之后用来改变颜色的代码。
.getBackground().mutate().setColorFilter(getResources().getColor(R.color.Green), PorterDuff.Mode.SRC_ATOP);
现在它设置下划线颜色,使其始终为绿色,无论是否正在使用EditText框。
如何设置它以便在我单击EditText框后再返回默认颜色。我也可以将另一种颜色指定为默认颜色,如浅灰色。
答案 0 :(得分:0)
您可以使用OnFocusChangeListener.java注册编辑文本,并在焦点更改时更改颜色。
void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
// color while typing
}else{
// color when clicked away
}
}
答案 1 :(得分:0)
您可以为要添加到res / color / your_edittext_color_state.xml文件夹中的不同编辑文本状态创建颜色选择器xml。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#YOUR_COLOR"/>
<item android:state_focused="true" android:color="#ANY_COLOR"/>
<item android:color="#DEFAULT_COLOR"/>
</selector>
然后您可以在代码中设置foregroundTint
editText.setForegroundTintList(getApplicationContext()getResources()getColorStateList(R.color.your_edittext_color_state));
答案 2 :(得分:0)
我最后听到了这里给出的答案: How do I create ColorStateList programmatically?
我确实改变了一些事情,因为命令很重要,花了一点时间才意识到这一点。
将下面的代码块放在MainActivity的开头。
int[][] states = new int[][] {
new int[] { android.R.attr.state_focused}, // enabled
//new int[] {-android.R.attr.state_enabled}, // disabled
//new int[] {-android.R.attr.state_checked}, // unchecked
new int[] { android.R.attr.state_window_focused} // pressed
};
int[] colors = new int[] {
Color.GREEN,
//Color.BLUE,
//Color.YELLOW,
Color.GRAY
};
ColorStateList myColorAccentList = new ColorStateList(states, colors);
然后将我的陈述放在我需要的for循环中。
((EditText) row1.getVirtualChildAt(i)).setBackgroundTintList(myColorAccentList);
对于其他任何人,您可能只想在编辑文本的末尾添加此部分。
.setBackgroundTintList(myColorAccentList);