سؤال

كنت أرغب في لوحة مفاتيح رقمية تحتوي على زر GO أو تم إغلاقه ونفذ فئة حساب. بفضل نصيحة من CommonWare على مكان البدء ، حصلت على هذا العمل بشكل جميل على المحاكي. ثم جئت لتحميله على رغبتي في HTC في الاختبار ولا يعمل على الإطلاق. أنا متأكد من أنه يجب أن يكون بسبب HTC Sense لها IME ولكن يجب أن يكون هناك بالتأكيد وسيلة لجعل هذا العمل على هواتف HTC؟ تمكن أي شخص آخر من الالتفاف على هذه القضية؟

هل كانت مفيدة؟

المحلول

يمكنني تكرار ما أعتقد أنك ترى على HTC لا يصدق.

لن تدعم جميع لوحات المفاتيح اللينة زر IME Action. قد لا يحتوي البعض ، مثل "لوحة المفاتيح" الناعمة على الجدران ، على أزرار على الإطلاق ، ناهيك عن زر عمل IME. حتى ال وثيقة تعريف التوافق لا يقول أي شيء عن طلب زر الإجراء مثل لوحات المفاتيح المقدمة بجهاز.

وبالتالي ، يجب ألا تعتمد على زر حركة IME. إذا كان هناك ، يمكن للمستخدمين استخدامه. ومع ذلك ، لديك دائمًا بعض الوسائل الأخرى لتحقيق هدفك.

نصائح أخرى

أنا أتكتشف ما إذا كان قد تم الضغط على زر التشغيل / GO / Return باستخدام OneDitorActionListener ، ولكن التحقق من خيارات IME و Keyevents لتغطية لوحات المفاتيح HTC وأي لوحات مفاتيح تقبل خيارات IME.

(يعمل هذا الرمز مع لوحات المفاتيح المذهلة HTC بالإضافة إلى أي لوحة مفاتيح لها خيارات IME)

EditText.setOnEditorActionListener(new TextView.OnEditorActionListener(){
    public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event){
        if(actionId == EditorInfo.IME_ACTION_DONE 
            || actionId == EditorInfo.IME_NULL
            || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){

            //Do something in here
            return true;
        } else {
            return false;
        }
    }
});

كنت أستخدم edittext مع inputType = "Number" وحل المشكلة عن طريق تعديل حل ASHA:

private TextView.OnEditorActionListener numberEnterListener = new TextView.OnEditorActionListener(){
        public boolean onEditorAction(TextView tv, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE 
                || actionId == EditorInfo.IME_NULL
                || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){

                tv.clearFocus();

                //Stupid keyboard needs to be closed as well
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(tv.getWindowToken(), 0);

                return true;
            } else {
                return false;
            }
        }
    };

تمت إزالة التركيز من أجل التوقف عن إظهار لوحة الأرقام. كان مطلوبًا من IMM لأن لوحة المفاتيح اللينة لا تزال موجودة حتى بعد مسح التركيز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top