从Android的隐藏的EditText软键盘,而不是失去光标(Android Hide Soft

2019-07-04 03:55发布

我来约至于这其中让我中途有,但不大。 我有一个拨号器Fragment具有所有常用Button s到输入号码,包括退格,所以我并不需要的软键盘。 我也想给用户粘贴文本(长按...作品每违约金),以及修改的内容已经进入了,所以我需要将光标的能力。

最简单的方法,我发现,以确保当用户点击里面的软键盘不会弹出EditText是设置inputType为空-但杀死光标也是如此。

那么,如何我宣布我EditText ,我应该推出什么样的命令有我EditText场从来没有表现出软键盘无论用户尝试一下,但仍保留粘贴功能,光标?

我也试过android:windowSoftInputMode="stateAlwaysHidden"在我的清单,但都无济于事。

Answer 1:

这为我工作:

        // Update the EditText so it won't popup Android's own keyboard, since I have my own.
    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) {
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            }                
            return true;
        }
    });


Answer 2:

我终于找到一个(对我)的工作解决了这一点。

第一部分(中的onCreate):

// Set to TYPE_NULL on all Android API versions
mText.setInputType(InputType.TYPE_NULL);
// for later than GB only
if (android.os.Build.VERSION.SDK_INT >= 11) {
    // this fakes the TextView (which actually handles cursor drawing)
    // into drawing the cursor even though you've disabled soft input
    // with TYPE_NULL
    mText.setRawInputType(InputType.TYPE_CLASS_TEXT);
}

此外,Android:textIsSelectable需要被设置为true(或设置的onCreate)和EditText上不能集中在初始化。 如果您的EditText是第一个可聚焦视图(这是在我的情况),您可以解决此通过把这个它上面:

<LinearLayout
  android:layout_width="0px"
  android:layout_height="0px"
  android:focusable="true"
  android:focusableInTouchMode="true" >
    <requestFocus />
</LinearLayout>

你可以看到这个结果的图示器应用程序,免费的,可以在谷歌播放。



Answer 3:

旗textIsSelectable设置为true,禁用软键盘。

您可以在XML布局这样的设置:

<EditText
    android:id="@+id/editText"
    ...
    android:textIsSelectable="true"/>

或以编程方式,就像这样:

EditText editText = (EditText) findViewById(R.id.editText);
editText.setTextIsSelectable(true);

光标将仍然存在,你就可以选择/复制/剪切/粘贴,但软键盘一定不会显示。



Answer 4:

使用

android:windowSoftInputMode="stateHidden" 

在您的清单文件,而不是android:windowSoftInputMode="stateAlwaysHidden"



Answer 5:

这是我做的。 首先,在清单内活动

android:windowSoftInputMode="stateAlwaysHidden|adjustNothing"

其次,在onCreate如果内部活动或onActivityCreated如果内部片段

editText.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            hideSoftKeyboard(v);
        }
    });

不要忘了要求集中到EDITTEXT

editText.requestFocus();

然后添加hideSoftKeyboard(v)的方法相同,对方的回答。

private void hideSoftKeyboard(View v){
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

这里的关键是要requestFocus的点击的EditText之前。 如果没有焦点,第一次点击就会使键盘出现(我的经验)。 但是,如果你有一个活性的单一的EditText此应用。 有了这个,你仍然可以使用自定义的键盘(如果有的话)类型,可以复制和粘贴,光标仍清晰可见。



Answer 6:

您需要的确切功能标志设置提供textIsSelectable中的EditText为true。 这样,光标将仍然存在,你就可以选择/复制/剪切/粘贴,但SoftKeyboard一定不会显示 。 需要API 11及以上。

您可以在XML布局这样的设置:

<EditText
    android:textIsSelectable="true"
    ...
/>

或以编程方式,就像这样:

EditText editText = (EditText) findViewById(R.id.editText);
editText.setTextIsSelectable(true);

对于使用API 10及以下的人,黑客在这里提供: https://stackoverflow.com/a/20173020/7550472



Answer 7:

从@Lupsaa最好的解决方案在这里 :

旗textIsSelectable设置为true,禁用软键盘。

您可以在XML布局这样的设置:

<EditText
android:id="@+id/editText"
...
android:textIsSelectable="true"/>

或以编程方式,就像这样:

EditText editText = (EditText) findViewById(R.id.editText);

editText.setTextIsSelectable(真);

光标将仍然存在,你就可以选择/复制/剪切/粘贴,但软键盘一定不会显示。



Answer 8:

    EditText text = (EditText) findViewById(R.id.text);
    if (Build.VERSION.SDK_INT >= 11) {
        text.setRawInputType(InputType.TYPE_CLASS_TEXT);
        text.setTextIsSelectable(true);
    } else {
        text.setRawInputType(InputType.TYPE_NULL);
        text.setFocusable(true);
    }


Answer 9:

这2个步骤完美地工作(对我来说):

  1. <activity... android:windowSoftInputMode="stateHidden">清单文件

  2. 在EDITTEXT XML代码添加这些属性

     android:focusable="true" android:focusableInTouchMode="true 

你必须把两个1和2,只有这样它会工作。

干杯



Answer 10:

首先添加android:windowSoftInputMode="stateHidden"在你的清单文件,活动下。 像这样

<activity... android:windowSoftInputMode="stateHidden">

在您的XML添加这个android:textIsSelectable="true" 。 这将使指针可见。

然后在活动的onCreate方法,补充一点:

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

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


Answer 11:

的EditText EDITTEXT =(的EditText)findViewById(R.id.edit_mine); editText.setOnTouchListener(新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) {
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }                
        return true;
    }
});

哈哈...这是做的正确的方法......这个工作做好......这要工作!



Answer 12:

您可以使用下面的一行代码在活动的onCreate方法,以确保键盘,只弹出当用户点击或触摸到一个EditText场。 我试过很多来自计算器的方法和代码,但没有工作的任何但是这完全适用于我! 试试这个..:)`

 this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);


Answer 13:

您可以使用下面的一行代码在活动的onCreate方法,以确保键盘,只弹出当用户点击或触摸到一个EditText场。 我试过很多来自计算器的方法和代码,但没有工作的任何但是这完全适用于我! 试试这个..:)`

        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);


文章来源: Android Hide Soft Keyboard from EditText while not losing cursor