0

我怀疑这是一个相当简单的概念,但我还没有设法在互联网上找到答案。

我创建了一个主要活动,它使用 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" />

我已经阅读了Android 的自定义组件教程,但它主要讨论的是改变组件的外观,而不是它们的行为,所以我不愿意使用画布。

那么,我将如何实现这一目标?

4

2 回答 2

0

您可以创建一个MyEditText扩展该类的 JavaEditText类。确保提供所有构造函数。

然后让这个类实现TextWatcher接口并提供所需的实现。

然后,您可以在您的问题中提到的布局中使用此自定义小部件(自定义 EditText),即使用完整的包名称对其进行限定com.example.MyEditText

为了使用 TextWatcher,您还可以使用 AutoCompleteEditText 而不是 EditText,这样您将对此自定义控件具有更大的灵活性。.

于 2012-08-02T04:43:21.647 回答
0

创建一个MyEditText扩展EditText实现所有构造函数。

然后在类中创建一个实例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);
    }



}
于 2012-08-02T05:18:41.553 回答