Android自定义EditText不在ICS中显示光标

我的应用程序中有一个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中,这种方法也阻止了光标的出现。

setCursorVisible(true)没有任何作用。

我尝试了隐藏软键盘的替代方法,例如使用android:editable="false".setKeyListener(null); 但这些解决方案都没有在我的测试中工作过。 键盘始终显示。

那么,有没有办法在ICS中返回光标,同时保持onCheckIsTextEditor原样覆盖?


你为什么不试试像这样禁用软键盘

PINLockactivity.java

    //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字段

xml代码是

<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>

这对我用输入安全密码与光标工作正常。

我正在从按钮而不是键盘输入。


我终于找到了一个(对我来说)工作解决方案。

第一部分(在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派生自己创建。

链接地址: http://www.djcxy.com/p/58651.html

上一篇: Android Custom EditText not showing cursor in ICS

下一篇: Hibernate ThreadLocal Session management compatible with ForkJoinPool?