我在做计算器。所以我制作了自己的带有数字和函数的按钮。必须计算的表达式位于编辑文本中,因为我希望用户也可以在表达式的中间添加数字或函数,所以使用编辑文本,我就有了光标。但是当用户点击编辑文本时,我想禁用键盘。我发现这个例子适用于
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兼容???谢谢
您还可以直接在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
}
}
这里有一个网站,可以满足你的需求
作为总结,它提供了指向Android开发人员的InputMethodManager
和View
的链接。它将引用View
和hideSoftInputFromWindow()
内部的getWindowToken
forInputMethodManager
链接中给出了更好的答案,希望能有所帮助。
以下是使用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
}
});
希望这能为你指明正确的方向
下面的代码都是针对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