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 コントロールを作成します。これは元のコントロールと同じように見えますが、すべての書式設定を行い、設定を保存します。

理想的には、カスタム EditText を表示するために xml を使用するだけで済みます。

<view
  class="com.android.example.myEditText" 
  id="@+id/editText" />

Android のカスタム コンポーネントチュートリアルを読んだことがありますが、コンポーネントの動作ではなく、コンポーネントの外観の変更について主に説明しているため、キャンバスの使用には消極的です。

それで、どうすればこれを達成できますか?

4

2 に答える 2

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 に答える
0

MyEditTextクラスを拡張するJavaクラスを作成できますEditText。すべてのコンストラクターを提供していることを確認してください。

次に、このクラスにTextWatcherインターフェースを実装させ、必要な実装を提供します。

次に、質問で述べたように、このカスタム ウィジェット (カスタム EditText) をレイアウトで使用できます。つまり、完全なパッケージ名で修飾します。com.example.MyEditText

TextWatcher を使用するには、EditText の代わりに AutoCompleteEditText を使用することもできます。これにより、このカスタム コントロールの柔軟性が向上します。

于 2012-08-02T04:43:21.647 に答える