嗨,我是做定制的拨号程序 ,所以我创造我自己的输入垫。
问题是我如何禁用的EditText,但仍允许剪切/复制/粘贴? 股票拨号器可以做到这一点。
我曾尝试android:focusable="false"
,但它禁用剪切/复制(仍然可以粘贴虽然)。
我也试图禁用inputType
编程它禁用所有三个命令:
myEditText.setInputType(InputType.TYPE_NULL); //Can't cut/copy/paste
从清单禁用它也不起作用:
android:configChanges="orientation|keyboardHidden" //Keyboard still popped up
任何解决方案? 谢谢
经过几个小时和研究时间,我终于发现,所有版本的API有效的解决方案。 希望这样可以节省别人的时间。
如果您是API开发> = 11,解决方法很简单,无论是:
1)添加下面的两个属性中的EditText的xml文件
android:inputType="none"
android:textIsSelectable="true"
要么
2)通过编程执行如下
myEditText.setInputType(InputType.TYPE_NULL);
myEditText.setTextIsSelectable(true);
就大功告成了。
如果要满足API <11为好,我发现,有没有办法从弹出,如果你想选择复制粘贴目的的字符串禁用键盘。 可调焦设置为false将禁用键盘,但它并没有帮助,因为它禁止你的选择文本太能力。 任何其他解决方案,我发现计算器所有要么不工作或在同一时间禁用文本选择了。
一种丑陋的方式来解决,这是因为这样的..
首先,在EditText上的xml文件添加该属性
android:editable="false"
是的,这是过时了,但必要使EditText上的API版本<11不可编辑。
下一步,我们将需要尽快隐藏键盘,因为它显示出来,这样我们就能够继续进行键盘挡住了路选择文本。
使用低于该代码来检测键盘显示出来(从获得的溶液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);
}
}
}
});
}
它适用于我的情况。 虽然你可以看到键盘上显示的是一秒钟(这是丑陋的部分),但我想不出任何其他方式得到这个在写作的时候工作。 如果你有更好的解决方案,请发表评论!
让我也知道,如果这样可以节省别人的时间:)
要禁用软键盘显示,保持复制/粘贴和光标的功能,只需添加这条线在你的活动:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
由于目前最顶级的答案使用过时的方法,并没有粘贴方法对我来说,这里不使用老方法的另一种方式。 但是,它并尝试通过反射使用隐藏的方法有后备。 =)
我子类EditText
到一个名为新的widget KeyboardlessEditText
仍然保留了所有的酷编辑功能没有键盘的表现。 刚落,在文件中去。
完整的代码是这个帖子有点长,但只要GitHub上不下去,那么这将工作: https://github.com/danialgoodwin/android-widget-keyboardless-edittext/blob/master/KeyboardlessEditText2的.java
要禁用系统键盘自动弹出EditText
或TextView
执行以下操作:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
editTextView.setShowSoftInputOnFocus(false);
} else {
editTextView.setTextIsSelectable(true);
//N.B. Accepting the case when non editable text will be selectable
}
试试这个
EditText et = ... // your EditText
et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView.
无需子类。 这,使您的EditText不可聚焦之间的主要区别,在于EditText上仍然有它自己的光标 - 你可以选择文本等,所有它的作用是抑制从弹出了自己的软键盘输入法。