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

禁用编辑文本上的键盘

林曦之
2023-03-14

我在做计算器。所以我制作了自己的带有数字和函数的按钮。必须计算的表达式位于编辑文本中,因为我希望用户也可以在表达式的中间添加数字或函数,所以使用编辑文本,我就有了光标。但是当用户点击编辑文本时,我想禁用键盘。我发现这个例子适用于Android 2.3,但使用ICS禁用键盘和光标。

public class NoImeEditText extends EditText {

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

   @Override      
   public boolean onCheckIsTextEditor() {   
       return false;     
   }         
}

然后我在我的XML文件中使用这个NoImeEditText

<com.my.package.NoImeEditText
      android:id="@+id/etMy"
 ....  
/>

我怎样才能使EditText与ICS兼容???谢谢


共有3个答案

林和煦
2023-03-14

您还可以直接在API 21上或通过在API 14上的反射使用setShowSoftInputOnFocus(boolean):

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    editText.setShowSoftInputOnFocus(false);
} else {
    try {
        final Method method = EditText.class.getMethod(
                "setShowSoftInputOnFocus"
                , new Class[]{boolean.class});
        method.setAccessible(true);
        method.invoke(editText, false);
    } catch (Exception e) {
        // ignore
    }
}
韦高谊
2023-03-14

这里有一个网站,可以满足你的需求

作为总结,它提供了指向Android开发人员的InputMethodManagerView的链接。它将引用ViewhideSoftInputFromWindow()内部的getWindowTokenforInputMethodManager

链接中给出了更好的答案,希望能有所帮助。

以下是使用onTouch事件的示例:

editText_input_field.setOnTouchListener(otl);

private OnTouchListener otl = new OnTouchListener() {
  public boolean onTouch (View v, MotionEvent event) {
        return true; // the listener has consumed the event
  }
};

下面是同一个网站的另一个例子。这声称有效,但似乎是个坏主意,因为您的EditBox为空,它将不再是编辑器:

MyEditor.setOnTouchListener(new OnTouchListener(){

  @Override
  public boolean onTouch(View v, MotionEvent event) {
    int inType = MyEditor.getInputType(); // backup the input type
    MyEditor.setInputType(InputType.TYPE_NULL); // disable soft input
    MyEditor.onTouchEvent(event); // call native handler
    MyEditor.setInputType(inType); // restore input type
    return true; // consume touch even
  }
});

希望这能为你指明正确的方向

朱宜
2023-03-14

下面的代码都是针对API的

/**
 * Disable soft keyboard from appearing, use in conjunction with android:windowSoftInputMode="stateAlwaysHidden|adjustNothing"
 * @param editText
 */
public static void disableSoftInputFromAppearing(EditText editText) {
    if (Build.VERSION.SDK_INT >= 11) {
        editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
        editText.setTextIsSelectable(true);
    } else {
        editText.setRawInputType(InputType.TYPE_NULL);
        editText.setFocusable(true);
    }
}
 类似资料:
  • 我有一个编辑文本,我想自己处理输入,所以我不想在我点击它时(或者当选择改变、焦点改变、长时间点击等)软键盘出现。但是,我仍然希望能够选择文本、更改光标位置、复制/过去等。 我曾尝试将Android系统:windowSoftInputMode=“stateAllwayshidden”放入清单中,但似乎效果不大。我还尝试添加以下内容 这会禁用键盘,但也会阻止光标工作。 目前,我基本上是在尝试为键盘可能

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

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

  • 我有一个EditText对象输入,我正在动态创建。当我选择EditText对象输入文本时,我只是不想弹出小键盘,因为我制作了不同的按钮并为所有这些按钮设置了OnClickListner-s,它们将执行输入,但当小键盘弹出时,它覆盖了屏幕,我想禁用它,因为我不想让任何人从小键盘输入文本。我只希望他们从我创建的按钮输入值。

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

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