Android 11.0 修复在计算器APK(Calculator),按一次Backspace键会删掉两个字符

理想效果:按一次Backspace键删掉一个字符

packages/apps/ExactCalculator/src/com/android/calculator2/Calculator.java

思路:先将 计算器APK内 Backspace键的删除效果删掉

@Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
    
    
        switch (keyCode) {
    
    
            case KeyEvent.KEYCODE_NUMPAD_ENTER:
            case KeyEvent.KEYCODE_ENTER:
            case KeyEvent.KEYCODE_DPAD_CENTER:
                mCurrentButton = mEqualButton;
                onEquals();
                return true;
            case KeyEvent.KEYCODE_DEL:
                mCurrentButton = mDeleteButton;
++                //onDelete();
                return true;
            case KeyEvent.KEYCODE_CLEAR:
                mCurrentButton = mClearButton;
                onClear();
                return true;
            default:
                cancelIfEvaluating(false);

frameworks/base/core/java/android/app/Activity.java

public boolean onKeyDown(int keyCode, KeyEvent event)  {
    
    
++        android.app.ActivityManager am =  (android.app.ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
++        android.content.ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
++        // 阻止计算器界面上的 BackSpace 键
++        if (keyCode==KeyEvent.KEYCODE_DEL && "xxx.Calculator".equals(cn.getClassName())){
    
    
++            // 14.0 英寸、15.6 英寸设备 x、y 相同
++            int x=960,y=208;
++            // 11.6寸设备x,y需要区别对待
++            if ("1".equals(SystemProperties.get("persist.sys.scakeypad"))){
    
    
++                x = 684;
++                y = 192;
++            }
++            // 模拟触摸 DEL 事件
++            MotionEvent downMotion = MotionEvent.obtain(android.os.SystemClock.uptimeMillis(),android.os.SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,x,y,0);
++            MotionEvent upMotion = MotionEvent.obtain(android.os.SystemClock.uptimeMillis(),android.os.SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,x,y,0);
++            dispatchTouchEvent(downMotion);
++            dispatchTouchEvent(upMotion);
++            return true;
++        } //end

我是王睿丶,加入我的Q群:901440630,欢迎一起讨论安卓技术!

猜你喜欢

转载自blog.csdn.net/qq_27494201/article/details/125080250