我的应用程序中有一个EditText,它只接收我放在屏幕上的按钮的输入。
为避免出现软键盘,我有一个自定义的EditText类,如下所示:
public class CustomEditText extends EditText {
public CustomEditText(Context context) {
super(context);
}
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
// Disables Keyboard;
public boolean onCheckIsTextEditor() {
return false;
}
}
这会成功阻止键盘出现,但在ICS中,这种方法也会阻止Cursor出现。
setCursorVisible(true)
没有任何效果。
我已经尝试过隐藏软键盘的替代方法,例如使用android:editable="false"
和.setKeyListener(null);
,但这些解决方案都没有在我的测试中发挥过作用。键盘总是出现。
那么,有没有办法在ICS中返回光标,同时保持onCheckIsTextEditor覆盖原样?
答案 0 :(得分:3)
为什么不尝试像这样禁用软键盘
//text field for input sequrity pin
txtPin=(EditText) findViewById(R.id.txtpin);
txtPin.setInputType(
InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_PASSWORD);
txtPin.setSelection(txtPin.getText().length());
txtPin.setTextSize(22);
txtPin.setSingleLine(true);
//disable keypad
txtPin.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
int inType = txtPin.getInputType(); // backup the input type
txtPin.setInputType(InputType.TYPE_NULL); // disable soft input
txtPin.onTouchEvent(event); // call native handler
txtPin.setInputType(inType); // restore input type
return true; // consume touch even
}
});
和此EditText字段
<EditText android:layout_width="wrap_content"
android:id="@+id/txtpin"
android:maxLength="4"
android:layout_height="37dp"
android:gravity="center_horizontal"
android:longClickable="false"
android:padding="2dp"
android:inputType="textPassword|number"
android:password="true"
android:background="@drawable/edittext_shadow"
android:layout_weight="0.98"
android:layout_marginLeft="15dp">
<requestFocus></requestFocus>
</EditText>
这对我来说可以正常使用带光标的输入安全PIN。
我从按钮而不是键盘输入。
答案 1 :(得分:1)
我终于找到了一个(对我来说)工作解决方案。
第一部分(在onCreate中):
// Set to TYPE_NULL on all Android API versions
mText.setInputType(InputType.TYPE_NULL);
// for later than GB only
if (android.os.Build.VERSION.SDK_INT >= 11) {
// this fakes the TextView (which actually handles cursor drawing)
// into drawing the cursor even though you've disabled soft input
// with TYPE_NULL
mText.setRawInputType(InputType.TYPE_CLASS_TEXT);
}
此外,android:textIsSelectable需要设置为true(或在onCreate中设置),并且EditText不能专注于初始化。如果您的EditText是第一个可聚焦的视图(在我的情况下是它),您可以通过将它放在它上面来解决这个问题:
<LinearLayout
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true" >
<requestFocus />
</LinearLayout>
您可以在Grapher应用程序中看到此结果,免费并可在Google Play中使用。
注意/编辑:在使用此方法阻止光标被禁用时,无需从EditText派生自己创建。