我有一个简单登录页面的活动 . 点击提交按钮我在电子邮件编辑文本上设置一个红色边框并添加一个textwatcher,以便在textchanged listner上我可以将电子邮件编辑文本边框从红色更改为灰色 . 一切正常,直到我不改变我的屏幕方向 . 当我处于potrait模式时,我在电子邮件编辑文本上设置了红色边框,当我旋转屏幕时,它会变得更改看起来像textwacther被调用 . 如何保持editext的状态,以便如果我将其边框颜色设置为红色,则应将其设置为红色,而不管屏幕旋转如何也应该更改为灰色 .
下面是我的Actvity类:
public class MainActivity extends AppCompatActivity {
@BindView(R.id.email)
EditText email;
@BindView(R.id.password)
EditText password;
@BindView(R.id.submit)
Button submit;
private MyViewModel myViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
setUpTextWatcher(email,password);
myViewModel.setError().observe(this,getErrorObserver());
myViewModel.resetError().observe(this,getResetObserver());
}
private Observer<EditText> getResetObserver() {
return new Observer<EditText>() {
@Override
public void onChanged(@Nullable EditText editText) {
if(editText.getId() == email.getId()){
email.setBackgroundDrawable(getResources().getDrawable(R.drawable.input_shape));
}else{
password.setBackgroundDrawable(getResources().getDrawable(R.drawable.input_shape));
}
}
};
}
private Observer<EditText> getErrorObserver() {
return new Observer<EditText>() {
@Override
public void onChanged(@Nullable EditText editText) {
if(editText.getId() == email.getId()){
email.setBackgroundDrawable(getResources().getDrawable(R.drawable.red_input_shape));
}else{
password.setBackgroundDrawable(getResources().getDrawable(R.drawable.red_input_shape));
}
}
};
}
@OnClick(R.id.submit)
public void autenticate(){
myViewModel.setError().setValue(email);
}
private void setUpTextWatcher(EditText ...editTexts) {
for(final EditText editText: editTexts){
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(editText.hasFocus()){
myViewModel.resetError().setValue(email);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
}
下面是Myview模型类
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;
import android.widget.EditText;
public class MyViewModel extends ViewModel {
private MutableLiveData<EditText> setErrorOnEditText;
private MutableLiveData<EditText> resetErrorOnEditText;
public MutableLiveData<EditText> setError() {
if (setErrorOnEditText == null) {
setErrorOnEditText = new MutableLiveData<EditText>();
}
return setErrorOnEditText;
}
public MutableLiveData<EditText> resetError() {
if (resetErrorOnEditText == null) {
resetErrorOnEditText = new MutableLiveData<EditText>();
}
return resetErrorOnEditText;
}
}
下面是我的xml文件,用于设置编辑文本背景灰色:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="2dip"
android:layout_height="2dip"
android:shape="rectangle" >
<corners
android:radius="2dp"
/>
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#fff"
android:startColor="#fff"
android:endColor="#fff"
android:type="linear"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="250dp"
android:height="50dp"
/>
<stroke
android:width="1dp"
android:color="@color/input_border"
/>
</shape>
下面是我的用于设置编辑文本背景红色的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="2dip"
android:layout_height="2dip"
android:shape="rectangle" >
<corners
android:radius="2dp"
/>
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#fff"
android:startColor="#fff"
android:endColor="#fff"
android:type="linear"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="250dp"
android:height="50dp"
/>
<stroke
android:width="1dp"
android:color="@color/theme_color"
/>
</shape>