您的位置:首页 > 移动开发 > Android开发

EditText上禁用软键盘,但仍然允许复制/粘贴

2016-09-21 11:21 429 查看
嗨,我正在做的自定义拨号程序,所以我创造我自己的输入衰减。 问题是我怎么禁用的EditText,但仍然允许剪切/复制/粘贴?股票拨号器可以做到这一点。 我已经试过了
android:focusable="false"
但禁用剪切/复制(仍然可以粘贴虽然)。
我也试过禁用
inputType
编程它可禁止所有
myEditText.setInputType(InputType.TYPE_NULL); //Can't cut/copy/paste

从清单中禁用它也不起作用:
android:configChanges="orientation|keyboardHidden" //Keyboard still popped up

解决的办法?谢谢
本文地址 :CodeGo.net/558093/ 
------------------------------------------------------------------------------------------------------------------------- 
1. 试试这个
EditText et = ... // your EditText
et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView.

无需子类。这一点,让你的EditText非是,EditText上仍然有它自己的光标之间的主要区别-你可以选择文本,等它所做的就是从弹出自己的软键盘抑制输入法。 
2. 下班后和时间的研究,我终于找到了一个解决方案,它适用于所有的API版本。希望这可以保存
如果你正在开发的API>=11,解决方法很简单 CodeGo.net,可以: 1)在EditText上的xml文件中添加两个属性如下
android:inputType="none"
android:textIsSelectable="true"

或 2)通过编程做以下
myEditText.setInputType(InputType.TYPE_NULL);
myEditText.setTextIsSelectable(true);

就大功告成了。 如果你想满足API <11为好,我发现,有没有办法从弹出了,如果你想选择的文本复制粘贴目的禁用键盘。设置为false将禁用键盘,但它并不能帮助它禁止你的能力来选择文本了。任何其他解决方案,我发现在StackOverflow的一切要么不工作或禁用文本选择的了。
一个丑陋的方式来解决,这是因为这样的.. 首先,在EditText上的xml文件中添加这个属性
android:editable="false"

是的,这已被弃用,但需要作出的EditText在API版本<11不可编辑。 接下来,我们需要尽快隐藏键盘,因为它显示出来,这样我们就可以继续,而不键盘挡住了路选择文本。 用下面这段代码来检测键盘显示出来(从溶液中获得,它隐藏
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上禁用软键盘,但仍然允许复制/粘贴?
本文地址 :CodeGo.net/558093/ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android EditView