防止键盘弹出EditText点击?

时间:2017-03-25 13:50:34

标签: android android-edittext android-softkeyboard

当我从编辑文字中选择文字时,如何阻止键盘打开?我希望里面的文字仍然可以选择,而我点击它时不打开键盘

 <EditText
        android:id="@+id/displayalllinks"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:ems="10" >

3 个答案:

答案 0 :(得分:1)

您可以通过添加 inputType 为无和 textIsSelectable 来实现此目的:

 <EditText
        android:id="@+id/displayalllinks"
        android:inputType="none"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:ems="10" />  

并且

 EditText editText = (EditText)findViewById(R.id.edit_mine);
    editText.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            v.onTouchEvent(event);
            InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            if (imm != null  && editText.hasSelection()){
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            }                
            return true;
        }
    });

答案 1 :(得分:1)

editText = (EditText) findViewById(R.id.editText_1);
boolean disabled = false;

//We listen for selection
editText.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {

        if (MotionEvent.ACTION_UP == event.getAction()) {

          //When selected, we disable input.
          if (editText.hasSelection()) {
              editText.setInputType(InputType.TYPE_NULL);
              disabled = true;
          } else 
              //Then we restore it, if previously unset.
              if (disabled) {  
                  editText.setInputType(TYPE_CLASS_TEXT);
                  disabled = false;
              }  

        return false;
      }
});

希望这有帮助!

答案 2 :(得分:0)

这是一种hacky行为,因为作为用户,如果您点击EditText,则表示您希望与该文本有关。

我已经提出了这个解决方案:扩展AppCompatEditText并覆盖onTouchEvent()行为。

public class MyEditText extends AppCompatEditText {
    public MyEditText(Context context) {
        super(context);
    }

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

    public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int currentInputType = getInputType();
        setInputType(InputType.TYPE_NULL);
        boolean b = super.onTouchEvent(event);
        setInputType(currentInputType);
        return b;
    }
}

结果如下:

Clicking on EditText doesn't open soft keyboard

在这个gif中,您看到它不会破坏长按功能。