安卓EditText能不能实现有文字时和无文字时的背景颜色不同 200
可以实现,自定义一个edittext,对其输入和焦点监听改变背景色就可以了。
/**
* Created by beckett on 2018/4/23.
*/
public class BackgroundEditText extends AppCompatEditText implements View.OnFocusChangeListener, TextWatcher {
private boolean hasFoucs;
public BackgroundEditText(Context context) {
this(context, null);
}
public BackgroundEditText(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.editTextStyle);
}
public BackgroundEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
// 默认设置隐藏背景
setBackgroundColorVisible(false);
// 设置焦点改变的监听
setOnFocusChangeListener(this);
// 设置输入框里面内容发生改变的监听
addTextChangedListener(this);
}
/**
* 当BackgroundEditText焦点发生变化的时候,
* 输入长度为零,隐藏背景,否则,显示背景
*/
@Override
public void onFocusChange(View v, boolean hasFocus) {
this.hasFoucs = hasFocus;
if (hasFocus) {
setBackgroundColorVisible(getText().length() > 0);
} else {
setBackgroundColorVisible(false);
}
}
protected void setBackgroundColorVisible(boolean visible) {
if(visible){
setBackgroundResource(R.color.colorPrimary); //有文本长度时
}else{
setBackgroundResource(R.color.Transparent); //没有透明
}
}
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
if (hasFoucs) {
setBackgroundColorVisible(s.length() > 0);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
}