Android 在“编辑文本”中,如果先键入一个字符,然后键入另一个字符,则其他字符将覆盖第一个字符

Android 在“编辑文本”中,如果先键入一个字符,然后键入另一个字符,则其他字符将覆盖第一个字符,android,Android,我有应用程序内键盘,它在模拟器上工作得很好,但在真实设备上,当我输入一个字符,然后输入另一个字符时,其他字符会覆盖编辑文本中的第一个字符。 xml文件很简单,只需设计键盘布局 您还可以查看视频:。 在视频代码工作完美,但对于真实设备上的模拟器,它显示了问题,正如我前面提到的 public class MyKeyboard extends LinearLayout implements View.OnClickListener, View.OnTouchListener { Mediapl

我有应用程序内键盘,它在模拟器上工作得很好,但在真实设备上,当我输入一个字符,然后输入另一个字符时,其他字符会覆盖编辑文本中的第一个字符。 xml文件很简单,只需设计键盘布局

您还可以查看视频:。 在视频代码工作完美,但对于真实设备上的模拟器,它显示了问题,正如我前面提到的

public class MyKeyboard extends LinearLayout implements View.OnClickListener, View.OnTouchListener {
    Mediaplayer mp=new Mediaplayer(getContext());
    CountDownTimer mTimer;
    private Button button1, button2, button3, button4,
            button5, button6, button7, button8,
            button9, button0, buttonSpace,
            button11,button12,button13,button14,button15,button16,button17,button18,button19,button20,
            button21,button22,button23,button24,button25,button26,button27,button28,button29,button30,
            button31,button32,button33,button34,button35,button36,button37,button38,button39,button40,
            button41,button42,button43,button44,button45,button46,button47,button48,button49,button50,
            button51,button52,button53,button54;
    ImageButton buttonDelete,buttonEnter;

    private SparseArray<String> keyValues = new SparseArray<>();
    private InputConnection inputConnection;

    public MyKeyboard(Context context) {
        this(context, null, 0);
    }

    public MyKeyboard(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

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

    private void init(Context context, AttributeSet attrs) {
        LayoutInflater.from(context).inflate(R.layout.keyboard, this, true);
        button1 = findViewById(R.id.button_1);
        button1.setOnClickListener(this);
        button2 = findViewById(R.id.button_2);
        button2.setOnClickListener(this);
        button3 =  findViewById(R.id.button_3);
        button3.setOnClickListener(this);
        button4 = findViewById(R.id.button_4);
        button4.setOnClickListener(this);
        button5 = findViewById(R.id.button_5);
        button5.setOnClickListener(this);
        button6 =  findViewById(R.id.button_6);
        button6.setOnClickListener(this);
        button7 =  findViewById(R.id.button_7);
        button7.setOnClickListener(this);
        button8 =  findViewById(R.id.button_8);
        button8.setOnClickListener(this);
        button9 =  findViewById(R.id.button_9);
        button9.setOnClickListener(this);
        button0 =  findViewById(R.id.button_0);
        button0.setOnClickListener(this);
        buttonDelete =  findViewById(R.id.button_delete);
        buttonDelete.setOnClickListener(this);
        buttonDelete.setOnTouchListener(this);
        buttonSpace =  findViewById(R.id.button_space);
        buttonSpace.setOnClickListener(this);
        buttonEnter =  findViewById(R.id.button_enter);
        buttonEnter.setOnClickListener(this);
        button11 = findViewById(R.id.button_11);
        button11.setOnClickListener(this);
        button12 = findViewById(R.id.button_12);
        button12.setOnClickListener(this);
        button13 = findViewById(R.id.button_13);
        button13.setOnClickListener(this);
        button14 = findViewById(R.id.button_14);
        button14.setOnClickListener(this);
        button15 = findViewById(R.id.button_15);
        button15.setOnClickListener(this);
        button16 = findViewById(R.id.button_16);
        button16.setOnClickListener(this);
        button17 = findViewById(R.id.button_17);
        button17.setOnClickListener(this);
        button18 = findViewById(R.id.button_18);
        button18.setOnClickListener(this);
        button19 = findViewById(R.id.button_19);
        button19.setOnClickListener(this);
        button20 = findViewById(R.id.button_20);
        button20.setOnClickListener(this);
        button21 = findViewById(R.id.button_21);
        button21.setOnClickListener(this);
        button22 = findViewById(R.id.button_22);
        button22.setOnClickListener(this);
        button23 = findViewById(R.id.button_23);
        button23.setOnClickListener(this);
        button24 = findViewById(R.id.button_24);
        button24.setOnClickListener(this);
        button25 = findViewById(R.id.button_25);
        button25.setOnClickListener(this);
        button26 = findViewById(R.id.button_26);
        button26.setOnClickListener(this);
        button27 = findViewById(R.id.button_27);
        button27.setOnClickListener(this);
        button28 = findViewById(R.id.button_28);
        button28.setOnClickListener(this);
        button29 = findViewById(R.id.button_29);
        button29.setOnClickListener(this);
        button30 = findViewById(R.id.button_30);
        button30.setOnClickListener(this);
        button31 = findViewById(R.id.button_31);
        button31.setOnClickListener(this);
        button32 = findViewById(R.id.button_32);
        button32.setOnClickListener(this);
        button33 = findViewById(R.id.button_33);
        button33.setOnClickListener(this);
        button34 = findViewById(R.id.button_34);
        button34.setOnClickListener(this);
        button35 = findViewById(R.id.button_35);
        button35.setOnClickListener(this);
        button36 = findViewById(R.id.button_36);
        button36.setOnClickListener(this);
        button37 = findViewById(R.id.button_37);
        button37.setOnClickListener(this);
        button38 = findViewById(R.id.button_38);
        button38.setOnClickListener(this);
        button39 = findViewById(R.id.button_39);
        button39.setOnClickListener(this);
        button40 = findViewById(R.id.button_40);
        button40.setOnClickListener(this);
        button41 = findViewById(R.id.button_41);
        button41.setOnClickListener(this);
        button42 = findViewById(R.id.button_42);
        button42.setOnClickListener(this);
        button43 = findViewById(R.id.button_43);
        button43.setOnClickListener(this);
        button44 = findViewById(R.id.button_44);
        button44.setOnClickListener(this);
        button45 = findViewById(R.id.button_45);
        button45.setOnClickListener(this);
        button46 = findViewById(R.id.button_46);
        button46.setOnClickListener(this);
        button47 = findViewById(R.id.button_47);
        button47.setOnClickListener(this);
        button48 = findViewById(R.id.button_48);
        button48.setOnClickListener(this);
        button49 = findViewById(R.id.button_49);
        button49.setOnClickListener(this);
        button50 = findViewById(R.id.button_50);
        button50.setOnClickListener(this);
        button51 = findViewById(R.id.button_51);
        button51.setOnClickListener(this);
        button52 = findViewById(R.id.button_52);
        button52.setOnClickListener(this);
        button53 = findViewById(R.id.button_53);
        button53.setOnClickListener(this);
        button54 = findViewById(R.id.button_54);
        button54.setOnClickListener(this);


        keyValues.put(R.id.button_1, "1");
        keyValues.put(R.id.button_2, "2");
        keyValues.put(R.id.button_3, "3");
        keyValues.put(R.id.button_4, "4");
        keyValues.put(R.id.button_5, "5");
        keyValues.put(R.id.button_6, "6");
        keyValues.put(R.id.button_7, "7");
        keyValues.put(R.id.button_8, "8");
        keyValues.put(R.id.button_9, "9");
        keyValues.put(R.id.button_0, "0");
        keyValues.put(R.id.button_11, "آ");
        keyValues.put(R.id.button_12, "ا");
        keyValues.put(R.id.button_13, "ب");
        keyValues.put(R.id.button_14, "پ");
        keyValues.put(R.id.button_15, "ت");
        keyValues.put(R.id.button_16, "ٹ");
        keyValues.put(R.id.button_17, "ث");
        keyValues.put(R.id.button_18, "ج");
        keyValues.put(R.id.button_19, "چ");
        keyValues.put(R.id.button_20, "ح");
        keyValues.put(R.id.button_21, "خ");
        keyValues.put(R.id.button_22, "د");
        keyValues.put(R.id.button_23, "ڈ");
        keyValues.put(R.id.button_24, "ذ");
        keyValues.put(R.id.button_25, "ر");
        keyValues.put(R.id.button_26, "ڑ");
        keyValues.put(R.id.button_27, "ز");
        keyValues.put(R.id.button_28, "ژ");
        keyValues.put(R.id.button_29, "س");
        keyValues.put(R.id.button_30, "ش");
        keyValues.put(R.id.button_31, "ص");
        keyValues.put(R.id.button_32, "ض");
        keyValues.put(R.id.button_33, "ط");
        keyValues.put(R.id.button_34, "ظ");
        keyValues.put(R.id.button_35, "ع");
        keyValues.put(R.id.button_36, "غ");
        keyValues.put(R.id.button_37, "ف");
        keyValues.put(R.id.button_38, "ق");
        keyValues.put(R.id.button_39, "ك");
        keyValues.put(R.id.button_40, "گ");
        keyValues.put(R.id.button_41, "ل");
        keyValues.put(R.id.button_42, "م");
        keyValues.put(R.id.button_43, "ن");
        keyValues.put(R.id.button_44, "ں");
        keyValues.put(R.id.button_45, "و");
        keyValues.put(R.id.button_46, "ه");
        keyValues.put(R.id.button_47, "ھ");
        keyValues.put(R.id.button_48, "ء");
        keyValues.put(R.id.button_49, "ي");
        keyValues.put(R.id.button_51, "ی");
        keyValues.put(R.id.button_50, "ے");
        keyValues.put(R.id.button_52, "۔");
        keyValues.put(R.id.button_53, "؟");
        keyValues.put(R.id.button_54, "،");


        keyValues.put(R.id.button_enter, "\n");
        keyValues.put(R.id.button_space," ");
    }

    @Override
    public void onClick(View view) {
        mp.check();
        mp.start();
        if (inputConnection == null)
            return;
        if (view.getId() == R.id.button_delete) {
//            CharSequence selectedText = inputConnection.getSelectedText(0);
//
//            if (TextUtils.isEmpty(selectedText)) {
//                inputConnection.deleteSurroundingText(1, 0);
//            } else {
//                inputConnection.commitText("", 1);
//            }
        } else {
            String value = keyValues.get(view.getId());
            inputConnection.commitText(value, 1);
        }
    }

    public void setInputConnection(InputConnection ic) {
        inputConnection = ic;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:

                deleteChar();

                break;

            case MotionEvent.ACTION_MOVE:
                /*--- no action required ---*/
                break;

            case MotionEvent.ACTION_UP:

                mTimer.cancel();

                break;
        }


        return false;
    }

    private void deleteChar() {
        mTimer = new CountDownTimer(9999999, 500) {

            @Override
            public void onTick(long millisUntilFinished) {
                CharSequence selectedText = inputConnection.getSelectedText(0);

                if (TextUtils.isEmpty(selectedText)) {
                    inputConnection.deleteSurroundingText(1, 0);
                } else {
                    inputConnection.commitText("", 1);
                }
            }

            @Override
            public void onFinish() {

            }
        };
        mTimer.start();
    }
}
public class MainActivity extends AppCompatActivity {
Toolbar toolbar;
    Mediaplayer mp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar=findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("");
        EditText editText = findViewById(R.id.editText);
        MyKeyboard keyboard = findViewById(R.id.keyboard);
        editText.setRawInputType(InputType.TYPE_CLASS_TEXT);  // uncomment to show suggestion
        editText.setTextIsSelectable(true);
        InputConnection ic = editText.onCreateInputConnection(new EditorInfo());
        keyboard.setInputConnection(ic);
        mp=new Mediaplayer(this);
        //for keyboard hide above lollypop versions
        editText.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);
                InputMethodManager mng= (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if(mng !=null)
                    mng.hideSoftInputFromWindow(v.getWindowToken(),0);
                return true;
            }
        });
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                mp.check();
                mp.start();
                Toast.makeText(this,"click",Toast.LENGTH_LONG).show();
                break;


            default:
                return super.onOptionsItemSelected(item);
        }
        return true;
    }
}