嗨,我正在制作自定义拨号器,因此我创建了自己的输入板。
问题是我如何禁用EditText但仍然允许剪切/复制/粘贴?股票拨号器可以做到这一点。
我已经尝试了android: Focus able="false"
,但它禁用了剪切/复制(虽然仍然可以粘贴)。
我还尝试通过编程禁用inputType
,这将禁用所有三个命令:
myEditText.setInputType(InputType.TYPE_NULL); //Can't cut/copy/paste
从清单中禁用它也不起作用:
android:configChanges="orientation|keyboardHidden" //Keyboard still popped up
有解决办法吗?谢谢
由于当前的热门答案使用了已弃用的方法,并且对我来说没有粘贴方法,因此这里有另一种不使用旧方法的方法。但是,它确实尝试通过反射和回退使用隐藏方法。=)
我将EditText
分为一个名为keyboardlesseditext
的新小部件,它仍然保留了所有很酷的编辑功能,而没有显示键盘。把文件放进去就行了。
对于这篇文章来说,完整的代码有点长,但只要GitHub不宕机,那么这就可以工作:https://github.com/danialgoodwin/android-widget-keyboardless-edittext/blob/master/KeyboardlessEditText2.java
要禁用软键盘显示,保留复制/粘贴和光标功能,只需在您的活动中添加以下行:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
经过数小时的研究,我终于找到了一个适用于所有API版本的解决方案。希望这能节省别人的时间。
如果您正在为API开发
1) 在EditText的xml文件中添加以下两个属性
android:inputType="none"
android:textIsSelectable="true"
或
2) 按程序执行以下操作
myEditText.setInputType(InputType.TYPE_NULL);
myEditText.setTextIsSelectable(true);
你完了。
如果你想迎合API
解决这个问题的一个丑陋的方法就是。。
首先,在EditText的xml文件中添加此属性
android:editable="false"
是的,这是不推荐的,但对于使EditText在API版本中不可编辑是必需的
接下来,我们需要在键盘出现时立即隐藏它,这样我们就可以继续选择文本而不会被键盘挡住去路。
使用下面的代码检测键盘显示(从https://stackoverflow.com/a/9108219/1241783),并立即将其隐藏。
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB)
{
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
activityRootView.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
//Hide the keyboard instantly!
if (getCurrentFocus() != null)
{
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
}
});
}
这对我的案子有效。虽然你可以在一瞬间看到键盘的出现(这是最难看的部分),但我想不出任何其他方法来让它在写作时发挥作用。如果你有更好的解决方案,请留言!
如果这能节省某人的时间,也请告诉我:)
我正在为用户编写一个选择国家的过程。我有一个edittext链接到适配器,显示所有可用选项。 在我的清单中,我将活动设置为 android: windowSoftInputMode="stateAlwaysHidden" 我需要完全禁用软键盘。 除了一种情况外,它工作正常。如果用户长时间点击/按下编辑文本,键盘就会弹出。 有没有办法通过使用代码或在清单中永久禁用特定活动中的键盘? 我的代码: 我的
我有带有edittext字段的自定义模板。当我点击软键盘上的“下一步”按钮时,它只移动了两次焦点--比按钮变成了“确定”。清单有12项。有没有办法导航到所有的项目,而不仅仅是2?你能帮帮我吗? 公共视图getView(int position,View convertView,ViewGroup parent){ }
问题内容: 有人知道键盘快捷键可以将行复制/粘贴到中的新行中,而不必突出显示整个行吗? - - 原来我的整个屏幕倒挂(我在Windows上)。有趣的是,这是在windows-> preferences中指定的。 问题答案: - - :拷贝当前行或选择线,以下面 - - ::拷贝当前行或所选择的线以上 - - :带来了快捷键列表 请参阅Windows /首选项->常规->键。
问题内容: 我汇总了一个简单的测试项目,该项目显示了一个包含EditText的PopupWindow(在Android 2.2上)。如我所料,当我点击EditText时,将显示软键盘。但是,软键盘覆盖了EditText,因此无法平移屏幕以使EditText保持应有的状态。我的代码: TestAdjustPanActivity.java: main.xml: popup.xml: …并且我的Andr
为了简化JavaFx应用程序的使用,我希望允许用户定义一个键盘组合/快捷键来触发应用程序最重要的操作。 我知道如何在代码中定义并将其设置为或在KeyEvent侦听器中使用它,但我希望允许用户只需在键盘上的某个设置对话框中按下它,就可以定义自己的KeyCodeCombination。 基本上沿着这个伪代码:
问题内容: 是否可以使用键盘扩展名将文本/图像复制到UIPasteboard?类似于popkey.co对动画图像所做的操作。 我测试了以下代码,但似乎无法正常工作。 它总是显示此错误消息: UIPasteboard-无法启动粘贴纸板。确保已将其安装在UIKit.framework / Support中 您是否知道通过键盘扩展名使用复制粘贴的其他方法? 问题答案: 如果我在“设置”->“常规”->“