76

電卓をやっています。Buttonsというわけで、数字と関数で自作しました。計算する必要がある式は です。これは、EditTextユーザーが式の途中でも数値や関数を追加できるようにするためEditTextですcursorKeyboardしかし、ユーザーが をクリックしたときに を無効にしたいEditText。この例は で問題ないことがわかりましAndroid 2.3たが、とカーソルをICS無効にします。Keyboard

public class NoImeEditText extends EditText {

   public NoImeEditText(Context context, AttributeSet attrs) { 
      super(context, attrs);     
   }   

   @Override      
   public boolean onCheckIsTextEditor() {   
       return false;     
   }         
}

そして、私NoImeEditTextは自分のXMLファイルでこれを使用します

<com.my.package.NoImeEditText
      android:id="@+id/etMy"
 ....  
/>

この EditText を ICS と互換性を持たせるにはどうすればよいですか??? ありがとう。

4

15 に答える 15

58

そんなあなたに必要な情報をお届けするサイトです

要約として、Android 開発者へのリンクと Android 開発者からのリンクを提供しInputMethodManagerますView。and forのgetWindowToken内部を参照しますViewhideSoftInputFromWindow()InputMethodManager

より良い答えがリンクに記載されています。これが役立つことを願っています。

onTouch イベントを使用する例を次に示します。

editText_input_field.setOnTouchListener(otl);

private OnTouchListener otl = new OnTouchListener() {
  public boolean onTouch (View v, MotionEvent event) {
        return true; // the listener has consumed the event
  }
};

これは同じウェブサイトからの別の例です。これは機能すると主張していますが、 EditBox が NULL であるため、エディターではなくなるため、悪い考えのように思えます。

MyEditor.setOnTouchListener(new OnTouchListener(){

  @Override
  public boolean onTouch(View v, MotionEvent event) {
    int inType = MyEditor.getInputType(); // backup the input type
    MyEditor.setInputType(InputType.TYPE_NULL); // disable soft input
    MyEditor.onTouchEvent(event); // call native handler
    MyEditor.setInputType(inType); // restore input type
    return true; // consume touch even
  }
});

これがあなたを正しい方向に向けることを願っています

于 2012-05-17T13:28:11.253 に答える
34

また、 setShowSoftInputOnFocus(boolean)を API 21 以降で直接使用することも、API 14 以降でリフレクションを介して使用することもできます。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    editText.setShowSoftInputOnFocus(false);
} else {
    try {
        final Method method = EditText.class.getMethod(
                "setShowSoftInputOnFocus"
                , new Class[]{boolean.class});
        method.setAccessible(true);
        method.invoke(editText, false);
    } catch (Exception e) {
        // ignore
    }
}
于 2014-10-30T08:38:42.740 に答える
22

試してください:android:editable="false"またはandroid:inputType="none"

于 2012-05-17T14:40:14.670 に答える
6

私のために働くこの解決策を見つけました。また、EditText をクリックすると、正しい位置にカーソルが置かれます。

EditText editText = (EditText)findViewById(R.id.edit_mine);
// set OnTouchListener to consume the touch event
editText.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            v.onTouchEvent(event);   // handle the event first
            InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            if (imm != null) {
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard 
            }                
            return true;
        }
    });
于 2015-05-19T16:21:33.313 に答える
6

Alex Kucherenko ソリューションに追加するには: 呼び出し後にカーソルが消える問題は、setInputType(0)ICS (および JB) のフレームワークのバグによるものです。

バグはここに文書化されています: https://code.google.com/p/android/issues/detail?id=27609

これを回避するには、通話setRawInputType(InputType.TYPE_CLASS_TEXT)の直後に電話してくださいsetInputType

キーボードが表示されないようにするOnTouchListenerには、EditText をオーバーライドして true を返します (タッチ イベントを飲み込みます)。

ed.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                return true;
            }
        });

GB デバイスではカーソルが表示され、ICS+ では表示されない理由により、私は 2 時間ほど髪をかきむしりました。

于 2013-06-08T14:00:57.737 に答える
5
// only if you completely want to disable keyboard for 
// that particular edit text
your_edit_text = (EditText) findViewById(R.id.editText_1);
your_edit_text.setInputType(InputType.TYPE_NULL);
于 2013-03-12T12:52:10.653 に答える
4

設定するだけです:

 NoImeEditText.setInputType(0);

またはコンストラクターで:

   public NoImeEditText(Context context, AttributeSet attrs) { 
          super(context, attrs);   
          setInputType(0);
       } 
于 2012-05-17T13:35:17.270 に答える