私のアプリでは、次のコードを使用してキーボードを無効にしました (現在はカスタム キーボードを使用しています)。
editText.setInputType(InputType.TYPE_NULL);
さて、私の問題は、編集テキストにテキストカーソルが表示されなくなったことです。私は何をすべきか?どんな提案でも大歓迎です。
私のアプリでは、次のコードを使用してキーボードを無効にしました (現在はカスタム キーボードを使用しています)。
editText.setInputType(InputType.TYPE_NULL);
さて、私の問題は、編集テキストにテキストカーソルが表示されなくなったことです。私は何をすべきか?どんな提案でも大歓迎です。
これについては、バグ トラッカーで開かれた問題があります。バグ トラッカーで開かれた問題です。ユーザーの 1 人は、「ほとんどの」デバイスで機能するアプローチを提案しています。
簡単に言うと、次のように呼び出すだけです。
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
EditTextビューの場合 ( を呼び出した後)editText.setInputType(InputType.TYPE_NULL);
。
おそらく次も設定する必要があります。
editText.setTextIsSelectable(true);
テキストを選択できるようにするためです (ただし、Samsung Galaxy SIII では正しく動作しないようです)。このメソッドは HONEYCOMB (api11) 以降でのみ使用できるため、古いバージョンの Android 向けに開発する場合は注意してください。
また、アクティビティの開始時にEditTextがフォーカスを受け取る最初のビューであってはならないことも述べられています (そうである場合は、別のビューからの requestFocus() だけです)。私は(個人的に)これで問題を経験していませんが。
私は本当にこれをお勧めしません。優れた本格的な IME を作成するのは非常に困難です。さらに、ユーザーは、キーボード自体に何か月も費やさなければ得られない機能 (オートコレクト、Swyping、次の単語予測、言語の変更機能) をキーボードに期待するようになります。Swype の使用を許可しないアプリはすぐに削除されます (バイアス ノート: 私は Swype android で作業しました)。
しかし、キーボードとして OS と完全に統合したい場合は、InputMethodService を作成する必要があります。キーボードは、ユーザーがキーボード選択メニューで選択できるようになり、どのアプリでも使用できるようになります。これが完全な OS 統合を実現する唯一の方法です。それ以外の場合は、独自の EditView を作成してゼロから始める必要があります。それを楽しんでください、見栄えの良いものを手に入れることは明らかに自明ではありません.
また、入力タイプを null に設定しても、ほとんどのキーボードは無効になりません。それらをダムモードにして、予測などをオフにするだけです。
カスタム キーボードにカスタム ビューを使用するだけでなく、本格的な IME を実装してみませんか? これにより、カーソルの問題が解決され、アプリの外部でキーボードを使用できるようになります (必要な場合)。
この回答には、それを行いたい場合に役立つリンクがいくつかあります 。Android用のソフトキーボードを開発するにはどうすればよいですか?
私は以下の答えを試してみましたが、うまくいきましたが、1) EditText は初期化に焦点を合わせてはいけません 2) ユーザーの焦点が editText にあるときに向きが変わると、ストックキーボードがポップアップします。これは別の「解決可能な」問題です.
これは以前の回答で言及されていましたが、 editText 要素がインスタンス化に焦点を合わせていないことを確認する必要があることに注意してください。
https://code.google.com/p/android/issues/detail?id=27609#c7
#7 nyphb...@gmail.com
私はついにこれに対する(私にとっての)実用的な解決策を見つけました。
最初の部分 (onCreate 内):
mText.setInputType(InputType.TYPE_NULL);
if (android.os.Build.VERSION.SDK_INT >= 11 /*android.os.Build.VERSION_CODES.HONEYCOMB*/) {
// this fakes the TextView (which actually handles cursor drawing)
// into drawing the cursor even though you've disabled soft input
// with TYPE_NULL
mText.setRawInputType(InputType.TYPE_CLASS_TEXT);
}
さらに、android:textIsSelectable を true に設定する (または onCreate で設定する) 必要があり、EditText を初期化に集中させてはなりません。EditText が最初のフォーカス可能な View である場合 (私の場合はそうでした)、これをそのすぐ上に配置することでこれを回避できます。
<LinearLayout
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true" >
<requestFocus />
</LinearLayout>