일종의 터미널 에뮬레이션을 사용하려면 키 누르기를 들어야합니다. 따라서 나는 EditText
이 없습니다. 하지만 성공적으로 여기Enter 키를 쿼리하는 것이 Android 소프트 키보드에서 작동하지 않습니다.
public class Click implements View.OnClickListener
{
@Override
public void onClick (View view)
{
CursorText terminal = (CursorText) findViewById (R.id.term_window);
InputMethodManager manager;
manager = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE);
manager.showSoftInput (terminal, InputMethodManager.SHOW_FORCED);
}
}
에 의해 변수 terminal
을 소프트 키보드를 생성 TextView
에서 파생 된 사용자 정의 클래스 CursorText
의 인스턴스입니다. 클릭 수를 허용하도록 속성은 android:textIsSelectable="true"
입니다. 그렇지 않으면 android:imeOptions="flagNoExtractUi|flagForceAscii"
이 있지만 이것들은 아무런 해를 끼치 지 않는 것 같습니다.
내 문제는 이제 키 입력을 받고 있습니다. API 문서를 조사해 보면 신뢰할만한 방법이없는 것처럼 보입니다. 관련 문서에서 설명한 클래스와 메서드는 하드웨어 키보드에서만 작동합니다. 그러나 방법이 있어야합니다.
onKeyListener
, onKeyPreIme
등 많은 접근 방식을 시도했지만 대부분 반응하지 않습니다. 예를 들어 onKeyPreIme
은 View
에서 파생 된 클래스에서 재정의해야합니다. 제 경우에는 확실한 선택 인 클래스 terminal
이 인스턴스입니다. EditText
이 아니기 때문에 onKeyPreIme
이 호출되지 않을 수도 있습니다. 나는 같은 이유로 내 경우에 나는 TextWatcher
을 사용할 수 없다고 생각한다.
지금까지의 최상의 결과는 활동에서 onKeyDown
을 무시한 것입니다. 이 메소드는 Backspace를 포함하여 거의 모든 키에 호출됩니다. 단 하나의 가장 중요한 키인 Enter (Return) 키가 예외입니다. 나는 다른 리스너 메소드가 나의 것보다 먼저 호출되고 처리하지만, 키 이벤트를 전달하지 않는다는 느낌이 들었다. 나는 알아낼 방법을 모르지만.
다른 문제는 onKeyDown
입니다. 키를 길게 누르면 자동 반복이 생성되지 않습니다. KeyEvent.ACTION_DOWN
만을보고하는 것 같지만 KeyEvent.ACTION_UP
이 아니기 때문에 자동 반복을 직접 만들 수 없습니다.
나는 자동 반복없이 살 수 있다고 생각하지만 Enter 키가없는 것이 쇼 스토퍼입니다. 그렇다면 Enter 키 이벤트의 잠금을 해제하려면 어떻게해야합니까? Enter 키를 누를 때 onKeyDown
이 호출되지 않도록하려면 어떻게해야합니까? 또는 키 스트로크를 듣는 전혀 다른 방식으로해야합니까?
BTW. Lollipop과 Kitkat, 실제 하드웨어의 CM과 에뮬레이터의 빈티지 -G Android - Jelly Bean 이상을 지원하려고 시도하고 있습니다.