●EditText エディットテキスト


■文字を書き込む

android.widget.EditText edittext=(android.widget.EditText)findViewById(R.id.editText);
edittext.setText("testText");

■文字の取得

edittext.getText().toString()

■有効化・無効化


setEnabled(true)で設定してisEnabled()で取得します。


▼有効を無効に無効を有効に反転しています。

edittext.setEnabled(!edittext.isEnabled());

■フォーカスを当てる

edittext.requestFocus();

■カーソルの位置を移動する


1文字目にカーソルを移動します。

edittext.setSelection(1);

■文字を選択する


1文字目から3文字目までを選択します

edittext.setSelection(1,3);

■カーソル位置を取得する


複数文字が選択されている場合は、開始位置がgetSelectionStart()に終了位置がgetSelectionEnd()で取得できます

int i = edittext.getSelectionStart();
int i = edittext.getSelectionEnd();

■ソフトウエアキーボードを消す


▼まずは起動時にいきなりキーボードが表示されるのを防ぐために、

protected void onCreate(Bundle savedInstanceState) {
・・・・・・
    getWindow().setSoftInputMode(android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

onCreateの中でキーボードを見えなくしておきます。


▼なにか操作したときに消すには、以下のプログラムを実行します。

android.app.Activity activity = this;
((android.view.inputmethod.InputMethodManager)activity.getSystemService(android.content.Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(view.getWindowToken(), 0);

古いバージョンだとひょっとしたらフォーカスをクリアする必要があるかもしれません。

activity.getCurrentFocus().clearFocus();

■イベント


▼クリックされたイベント

edittext.setOnClickListener(new android.view.View.OnClickListener() {
    public void onClick(android.view.View view) {

    }
});

▼フォーカスのイベント

edittext.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener(){
    @Override
    public void onFocusChange(android.view.View view, boolean hasFocus) {
        if(hasFocus) {
            //フォーカスが当たった
        }else{
            //フォーカスが外れた
        }
    }
});

▼文字が入力されたイベント

edittext.addTextChangedListener(new android.text.TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence cs, int position, int decrease, int increase) {
        //テキスト変更前
        //cs 入力された文字
    }

    @Override
    public void onTextChanged(CharSequence cs, int position, int decrease, int increase) {
        //テキスト変更
        //cs 入力された文字
    }

    @Override
    public void afterTextChanged(android.text.Editable e) {
        //テキスト変更後
    }
});

メソッドの引数で受け取るint position, int decrease, int increase などの値は、色々調べた結果、

position が編集されたカーソル位置
decrease が編集により削除される文字数
increase が編集により追加される文字数

であると思われます。

ただし、android4.4.4では4文字ある行の末尾にソフトキーボードで文字を追加すると次のようになります。

position:4
decrease:0
increase:1

しかし、android 7.0のソフトキーボードでは、このようになりました。

position:0
decrease:3
increase:4

ただ、エミュレータ上のandroid 7.0に対してパソコンのキーボードからの入力だとandroid4.4.4と同じ結果になります。
androidのバージョンにより色々動きが変わりややこやしいです。


▼キーボードからの入力チェック(ソフトウエアキーボードではありません)


以下のプログラムではaの文字を入力できなくしています。

edittext.setOnKeyListener(new android.view.View.OnKeyListener(){
    @Override
    public boolean onKey(android.view.View v, int keyCode, android.view.KeyEvent event) {
        android.util.Log.d("test",android.view.KeyEvent.KEYCODE_A+" "+(int)'a');
        if (android.view.KeyEvent.KEYCODE_A==keyCode && android.view.KeyEvent.ACTION_DOWN==event.getAction()) {
            return true;//入力キャンセルする
        }else{
            return false;
        }
    }
});


▲トップページ > android