hrs*_*ono 29 android android-edittext
嗨,我正在制作自定义拨号器,所以我创建了自己的输入板.
问题是如何禁用EditText 但仍然允许剪切/复制/粘贴?股票拨号器可以做到这一点.
我试过android:focusable="false"但它禁用剪切/复制(仍然可以粘贴).
我还试图以inputType编程方式禁用所有三个命令:
myEditText.setInputType(InputType.TYPE_NULL); //Can't cut/copy/paste
Run Code Online (Sandbox Code Playgroud)
从清单中禁用它也不起作用:
android:configChanges="orientation|keyboardHidden" //Keyboard still popped up
Run Code Online (Sandbox Code Playgroud)
有解决方案吗 谢谢
Bru*_*uce 54
经过数小时和数小时的研究,我终于找到了适用于所有API版本的解决方案.希望这能节省一些人的时间.
如果您正在为API> = 11开发,解决方案很简单,或者:
1)在EditText的xml文件中添加以下两个属性
android:inputType="none"
android:textIsSelectable="true"
Run Code Online (Sandbox Code Playgroud)
要么
2)以编程方式执行以下操作
myEditText.setInputType(InputType.TYPE_NULL);
myEditText.setTextIsSelectable(true);
Run Code Online (Sandbox Code Playgroud)
而且你已经完成了.
如果您也想要满足API <11,我发现如果您想选择用于复制粘贴目的的文本,则无法禁用键盘弹出.将focusable设置为false将禁用键盘但它没有帮助,因为它也会禁用您选择文本的能力.我在stackoverflow中找到的任何其他解决方案都不起作用或同时禁用文本选择.
解决这个问题的一个丑陋方法就是这样.
首先,在EditText的xml文件中添加此属性
android:editable="false"
Run Code Online (Sandbox Code Playgroud)
是的,这已被弃用,但是必须使EditText在API版本<11中不可编辑.
接下来,我们需要在键盘出现时立即隐藏它,这样我们就可以继续选择文本,而不会让键盘阻挡.
使用下面的代码检测键盘显示(从/sf/answers/637575361/获得的解决方案),并立即隐藏它.
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);
}
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
它适用于我的情况.虽然你可以看到键盘在一瞬间出现(这是丑陋的部分),但在写作的时候我想不出任何其他方式让它工作.如果您有更好的解决方案,请发表评论!
如果能节省某人的时间,请告诉我:)
San*_*rab 33
要禁用软键盘显示,保持复制/粘贴和光标功能,只需在活动中添加以下行:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Run Code Online (Sandbox Code Playgroud)
由于当前的最佳答案使用了一种弃用的方法,而且我没有使用粘贴方法,因此这是另一种不使用旧方法的方法.但是,它确实尝试通过反射使用隐藏方法.=)
我已经EditText将一个新的小部件子类化了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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22821 次 |
| 最近记录: |