当前位置: 首页 > 知识库问答 >
问题:

禁用编辑文本的软键盘

章高朗
2023-03-14

我有一个编辑文本,我想自己处理输入,所以我不想在我点击它时(或者当选择改变、焦点改变、长时间点击等)软键盘出现。但是,我仍然希望能够选择文本、更改光标位置、复制/过去等。

我曾尝试将Android系统:windowSoftInputMode=“stateAllwayshidden”放入清单中,但似乎效果不大。我还尝试添加以下内容

edittext.setOnTouchListener(new OnTouchListener() {
    @Override public boolean onTouch(View v, MotionEvent event) {
        EditText edittext = (EditText) v;
        int inType = edittext.getInputType();       // Backup the input type
        edittext.setInputType(InputType.TYPE_NULL); // Disable standard keyboard
        edittext.onTouchEvent(event);               // Call native handler
        edittext.setInputType(inType);              // Restore input type
        return true; // Consume touch event
    }
});

这会禁用键盘,但也会阻止光标工作。

目前,我基本上是在尝试为键盘可能弹出以将其关闭的所有情况添加侦听器,但这非常笨拙,我无法捕获所有情况。有没有更好的方法来禁用特定EditText或片段的软键盘?

共有2个答案

杜阳炎
2023-03-14

试试这个代码。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Disable IME for this application
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

        setContentView(R.layout.activity_layout);
钱季
2023-03-14

显然,最好的解决方案是如果Google提供一个这样工作的inputType。

以下几点很管用。它有时会在键盘加载时闪烁,然后立即被杀死。但是,当你点击文本视图时,它只会监听,然后当这种情况发生时,它就会杀死键盘。

它不能解释文本字段是否以其他方式获得焦点之类的事情,但对于我的目的(我有一个用于条形码阅读器的文本字段,它可以让条形码阅读器(硬件键盘)读取条形码),所以软键盘没有意义。

editView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    //imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
                }
            }
        });

我还在那里添加了您可能想要的另一行并将其注释掉。也就是说,如果您想隐藏Android启动的软键盘,或者如果用户通过按住菜单加载键盘,如果这也可能关闭。

 类似资料:
  • 我在做计算器。所以我制作了自己的带有数字和函数的

  • 在我的应用程序中,我所有屏幕的第一个视图是EditText,所以每次我去屏幕时都会弹出屏幕键盘。如何禁用此弹出窗口并在手动单击EditText时启用它??? xml代码: 第三个视图(EditText)是焦点所在。

  • 我有一个布局,其中包含RelativeLayout作为根布局,相对布局在顶部包含ListView,在相对布局的底部包含一个Edittext align。在Lollipop前版本的设备中,每当软键盘打开Edittext时,我就可以看到Edittext。但在Lollipop软键盘中隐藏了编辑文本。我已经在清单文件中设置了android:WindowsOfInputMode=“adjustPan|adj

  • 当软键盘弹出时,我需要在键盘和编辑文本之间提供一些填充,这通常会隐藏编辑文本的底部。 打开软键盘时,我需要完整的edittext视图可见。更重要的是,我不能使用<code>android:WindowsOfInputMode=“adjustResize”,这在我的用例中效果不佳。我正在使用“adjustPan”。 那么如何在不改变windowSoftInputMode的情况下实现相同呢?

  • 我有一个线性布局(LinearLayout),其中有几个编辑文本(EditText),它们都是通过编程方式创建的(不是用XML布局),尤其是没有id。 当我在其中一个中键入,并且下一个(各自对焦)被禁用,并且我按下键盘上的Next IME按钮时,焦点前进到禁用的,但我不能在其中键入任何内容。 我所期望的是焦点前进到下一个启用的编辑文本。除了通过EditText禁用EditText之外,我还尝试了。

  • 我想在用户在EditText中键入文本时将文本放入我的应用程序中的某个字符串中,并使用它来生动地在活动上显示它(在不同的视图中...) - 就像谷歌的实时/即时搜索工作一样...