我怀疑这是一个相当简单的概念,但我还没有在互联网上找到答案。
我创建了一个主要活动,使用TextWatcher在EditText中格式化输入:
public class MainActivity extends Activity implements TextWatcher {
EditText text;
int textCount;
String numba1, numba, n;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (EditText)findViewById(R.id.editText1);
text.addTextChangedListener(this);
}
/* TextWatcher Implementation Methods */
public void beforeTextChanged(CharSequence s, int arg1, int arg2, int after) {
// Does Nothing
}
public void onTextChanged(CharSequence s, int start, int before, int end) {
//Does random stuff with text
}
public void afterTextChanged(Editable s) {
//Does much more random stuff with text
}
protected void onResume() {
super.onResume();
SharedPreferences prefs = getPreferences(0);
String restoredText = prefs.getString("text", null);
if (restoredText != null) {
text.setText(restoredText, TextView.BufferType.EDITABLE);
int selectionStart = prefs.getInt("selection-start", -1);
int selectionEnd = prefs.getInt("selection-end", -1);
if (selectionStart != -1 && selectionEnd != -1) {
text.setSelection(selectionStart, selectionEnd);
}
}
}
protected void onPause() {
super.onPause();
SharedPreferences.Editor editor = getPreferences(0).edit();
editor.putString("text", text.getText().toString());
editor.putInt("selection-start", text.getSelectionStart());
editor.putInt("selection-end", text.getSelectionEnd());
editor.commit();
}
接下来,我想在我的项目中多次重复使用它,所以我想创建一个自定义的EditText控件,它看起来和原始控件一样,但可以进行所有格式设置和保存首选项。
理想情况下,我可以只使用xml来显示自定义EditText:
<view
class="com.android.example.myEditText"
id="@+id/editText" />
我读过安卓的自定义组件教程,但它主要讨论的是改变组件的外观,而不是它们的行为,所以我不愿意使用canvas。
那么,我该如何做到这一点呢?
您可以创建一个Java类,比如MyEditText
,它扩展了EditText
类。请确保提供所有构造函数。
然后让这个类实现TextWatcher
接口,并提供所需的实现。
然后,您可以在您的布局中使用此自定义小部件(自定义EditText),正如您在问题中提到的那样,即通过使用完整的包名称com.example.MyEditText
对其进行限定
为了使用TextWatcher,您还可以使用AutoCompleteEditText,而不是EditText,这样您就可以更灵活地使用此自定义控件。。
创建一个扩展EditText
的MyEditText
,实现所有构造函数。
然后创建TextWatcher
的实例作为类中的属性,并使用addTextChangedListner
添加侦听器
代码应该类似于这个
public class MyEditText extends EditText {
TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
addTextChangedListener(textWatcher);
}
}