当我从编辑文字中选择文字时,如何阻止键盘打开?我希望里面的文字仍然可以选择,而我点击它时不打开键盘
<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" >
答案 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;
}
}
结果如下:
在这个gif中,您看到它不会破坏长按功能。