要想实现一个将EditText变成不可编辑的状态,发现一个好方法,对于单独的EditText控件我们可以单独设置
1.首先想到在xml中设置Android:editable="false",但是如果想在代码中动态设置可编辑状态,没有找到对应的函数。
2。然后尝试使用editText.setFocusable(false);和editText.setEnabled(false);设置不可编辑状态;editText.setFocusable(true);和 editText.setEnabled(true);设置可编辑状态。
发现在editText.setFocusable(false);和editText.setEnabled(false);时不可编辑,但是editText.setFocusable(true);和 editText.setEnabled(true);也是不可编辑的,感觉这个时候EditText控件高亮度了,但是没有焦点
3.最后尝试使用editText.setFocusable(false);和editText.setFocusableInTouchMode(false);设置不可编辑状态;editText.setFocusableInTouchMode(true);editText.setFocusable(true);editText.requestFocus();设置可编辑状态
实现方式:
android:focusable="true"
android:focusableInTouchMode="true"
4.如果让EditText不可编辑在xml实现很简单Android:editable 可是在代码中却没有setEditable,只能使用
//不可编辑
editText.setFilters(new InputFilter[] { new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
}
} });
//可编辑
editText.setFilters(new InputFilter[] { new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
return null;
}
} });
这样做就可以在java代码中动态设置EditText的编辑状态了,但这个无法解决用户体验的问题,软键盘依然会打开,但无法输入,但可以选择内容。
通过这样方式试试吧,自定义一个类继承EditText
package custom.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.EditText;
public class CustomEditText extends EditText {
public CustomEditText(Context context,AttributeSet attrs) {
super(context,attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return true;
}
}
//然后在页面布局文件使用自定义的EditText
<custom.widget.CustomEditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>