在Android中设置textIsSelectable(true)后,软键盘无法打开

时间:2016-10-06 13:01:58

标签: android keyboard android-edittext android-softkeyboard

为了在不显示软键盘的情况下选择edittext,我放了edittext.textIsSelectable(true)属性,我隐藏了软键盘。

当我再次尝试打开软键盘时,它无法打开。

我尝试在edittext中设置setFocusable(true)但仍未打开键盘。 任何建议将不胜感激。

谢谢

5 个答案:

答案 0 :(得分:3)

通过使用EditText的以下代码,您可以获得Cut/Copy/Paste的活动 你必须创建如下所示的editText。你可以在事件触发后隐藏软键盘......

<com.example.textlink.EditTextMonitor
android:id="@+id/editText"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:hint="EditText" />

在你的包中创建一个java文件......

public class EditTextMonitor extends EditText {
private final Context mcontext; // Just the constructors to create a new
                                // EditText...

public EditTextMonitor(Context context) {
    super(context);
    this.mcontext = context;
}

public EditTextMonitor(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.mcontext = context;
}

public EditTextMonitor(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.mcontext = context;
}

@Override
public boolean onTextContextMenuItem(int id) {
    // Do your thing:
    boolean consumed = super.onTextContextMenuItem(id);
    // React:
    switch (id) {
    case android.R.id.cut:
        onTextCut();
        break;
    case android.R.id.paste:
        onTextPaste();
        break;
    case android.R.id.copy:
        onTextCopy();
    }
    return consumed;
}

/**
 * Text was cut from this EditText.
 */
public void onTextCut() {
    InputMethodManager imm = (InputMethodManager) getContext()
            .getApplicationContext()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    Toast.makeText(mcontext, "Event of Cut!", Toast.LENGTH_SHORT).show();
}

/**
 * Text was copied from this EditText.
 */
public void onTextCopy() {
    InputMethodManager imm = (InputMethodManager) getContext()
            .getApplicationContext()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    Toast.makeText(mcontext, "Event of Copy!", Toast.LENGTH_SHORT).show();
}

/**
 * Text was pasted into the EditText.
 */
public void onTextPaste() {
    InputMethodManager imm = (InputMethodManager) getContext()
            .getApplicationContext()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    Toast.makeText(mcontext, "Event of Paste!", Toast.LENGTH_SHORT).show();
}}

答案 1 :(得分:1)

不设置属性edittext.textIsSelectable(true)

您可以选择输入的文字并将其复制正确,为什么不盲目使用带有基本属性的edittext

答案 2 :(得分:1)

我找到了答案。

只需覆盖Edittext中的isTextSelectable()方法。

如果您想打开键盘,请返回super.isTextSelectable()

如果您不想打开键盘,请返回true

就是这样。它对我有用。

答案 3 :(得分:0)

试试这个 用于显示软键盘

InputMethodManager imm = (InputMethodManager)
                                  getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null){
        imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
    }

隐藏SoftKeyboard -

val spark : SparkSession = ??? 

答案 4 :(得分:0)

要强制打开软键盘,请尝试此

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);