1

У меня есть EditText и я пытаюсь вызвать dispatchKeyEvent из моего Activity вставить текст в EditText так:Android dispatchKeyEvent не работает для всех KeyEvent кодов

public class MainActivity extends AppCompatActivity implements View.OnFocusChangeListener { 

    String TAG = "test"; 
    EditText editText; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d(TAG, "onCreate: "); 
     setContentView(R.layout.activity_main); 
     editText = (EditText) findViewById(R.id.edittext); 
     editText.setOnFocusChangeListener(this); 
    } 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     Log.d(TAG, "onFocusChange: "+hasFocus); 
     if(hasFocus) { 
      dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT)); 
      dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT)); 
      dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_L)); 
      dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_O)); 
      dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_L)); 
     } 
    } 
} 

Письма работают нормально, но KeyEvents для сдвига и CapsLock делать ничего. Вышеприведенный код записывает «lol» в EditText вместо «Lol», который ожидался. Зачем?

+1

Я знаю, что это может быть достигнуто, как это, но это не то, что я спрашиваю. – batati

ответ

0

Вы можете использовать другой конструктор KeyEvent(), чтобы использовать метаданные сдвига, как это:

dispatchKeyEvent(new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_L,0,KeyEvent.META_SHIFT_ON)); 

Источник: https://developer.android.com/reference/android/view/KeyEvent.html

+0

Это работает. благодаря – batati