2

EditText の配列があり、クリックするたびに表示される標準キーボード Android を無効にしたいと考えています。

これらは私が使用している部品コードです:

InputMethodManager imm = (InputMethodManager)getSystemService(
              Context.INPUT_METHOD_SERVICE);
for (i=0;i<dim*dim;i++){

        imm.hideSoftInputFromWindow(value[i].getWindowToken(), 0);
        value[i].setOnTouchListener(this);
        value[i].setOnClickListener(this);
        value[i].setOnFocusChangeListener(this);


    }

編集:

次のコード行を使用して、新しいクラスを作成しました。

import android.content.Context;
import android.util.AttributeSet;
import android.widget.EditText;

public class KeyboardControlEditText extends EditText {
private boolean mShowKeyboard = false;

public void setShowKeyboard(boolean value) {
    mShowKeyboard = value;
}

// This constructor has to be overriden
public KeyboardControlEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
}

// Now tell the VM whether or not we are a text editor
@Override
public boolean onCheckIsTextEditor() {
    return mShowKeyboard;
}
}

そしてOnCreateの私のメインクラスでは:

for (i=0;i<dim*dim;i++){

((KeyboardControlEditText) value[i]).setShowKeyboard(false);
value[i].setOnTouchListener(this);
value[i].setOnClickListener(this);


}
4

1 に答える 1

5

EditTextこれには独自のクラスを作成する必要があります。次に、デフォルトonCheckIsTextEditorをオーバーライドして を返しfalseます。

public class NoKeyboardEditText extends EditText {
    // This constructor has to be overriden
    public NoKeyboardEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    // Now tell the VM that we are not a text editor
    @Override
    public boolean onCheckIsTextEditor() {
        return false;
    }
}

新しい を正しい名前に置き換えてくださいEditText。たとえば、パッケージがcom.example.widgetの場合、 を使用します<com.example.widget.NoKeyboardEditText ... />

これを動的にする必要がある場合は、さらに洗練されたものにすることができます。

public class KeyboardControlEditText extends EditText {
    private boolean mShowKeyboard = false;

    public void setShowKeyboard(boolean value) {
        mShowKeyboard = value;
    }

    // This constructor has to be overriden
    public KeyboardControlEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    // Now tell the VM whether or not we are a text editor
    @Override
    public boolean onCheckIsTextEditor() {
        return mShowKeyboard;
    }
}

そうすれば、実行時に呼び出し((KeyboardControlEditText) myEditText).setShowKeyboard(false);て変更できます。

于 2012-08-30T17:38:15.027 に答える