解决Android EditText使用扫码枪与中文输入法冲突的问题

使用码枪扫收款码等信息时,若当前使用的是部分中文输入法,则会可能出现扫码结果不准确的问题,解决此问题的方法是自定义EditText,并根据实际需求重写dispatchKeyEventPreIme方法。具体方法如下:

 

/**
 * 支持扫码的EditText
 * 解决扫码枪与中文输入法冲突的问题
 */
public class ScannerEditText extends AppCompatEditText {
    // 扫码结果
    public String mResult = "";
    // 回调接口
    public ScanResultListener mScanResultListener;

    public void setScanResultListener(ScanResultListener scanResultListener) {
        mScanResultListener = scanResultListener;
    }

    public ScannerEditText(Context context) {
        super(context);
    }

    public ScannerEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ScannerEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean dispatchKeyEventPreIme(KeyEvent event) {

        if("Virtual".equalsIgnoreCase(event.getDevice().getName())) return super.dispatchKeyEventPreIme(event);
        // 如果想过滤特殊输入设备,则可使用event.getDevice()中的属性过滤
        // 并在非过滤条件后return super.dispatchKeyEventPreIme(event);
        if (0 == event.getUnicodeChar()) return true;

        // 每次按键后累计字符
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            mResult += (char) event.getUnicodeChar();
        }
        // 码枪默认使用KEYCODE_ENTER作为结束标志
        if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
            if (mScanResultListener != null) mScanResultListener.onScanCompleted(mResult);
            mResult = "";
        }

        return true;
    }

    // 扫码结果回调
    public interface ScanResultListener{
        void onScanCompleted(String result);
    }
}

调用时可使用:

ScannerEditText mEtBarCode;        

void init(){
    mEtBarCode.addTextChangedListener(mBarCodeTextChangedListener);
        
    mEtBarCode.setScanResultListener(new ScannerEditText.ScanResultListener() {
            @Override
            public void onScanCompleted(String result) {
                mEtBarCode.setText(result);
            }
        });
}

 

你可能感兴趣的:(Android)