端末エミュレーションのキー入力を聞く必要があります。だから、私はEditText
を持っていない。しかし、私は成功し、ここで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を含むほぼすべてのキーに対して呼び出されます。 1つの最も重要なキー、Enter(Return)キーです。私は他のリスナーメソッドが私の前に呼び出され、ハンドルしますが、Enterキーイベントを渡していないと感じています。私は見つけ出す方法を知らない。
私が持っているもう1つの問題onKeyDown
は、キーを押したままでオートリピートを生成しないということです。 KeyEvent.ACTION_DOWN
としか報告されていないようですが、KeyEvent.ACTION_UP
はありませんので、自分自身で自動リピートを作成することはできません。
私はオートリピートせずに生きることができたと思うが、Enterキーを持たないとショーストッパーになる。どうすればEnterキーイベントのロックを解除できますか? Enterキーを押したときにonKeyDown
が呼び出されないようにするにはどうすればよいですか?あるいは、私はキーストロークを聞くという全く異なるやり方をとるべきでしょうか?
BTW。私はLollipopとKitkat、実際のハードウェア上のCMとエミュレータ上のVintage-Google-Androidの両方をテストしており、Jelly Bean以降をサポートしようとしています。