私は Android ネイティブ開発にまったく慣れていないので、IME アクション ボタンをカスタマイズする方法を理解しようとしています。Google のドキュメントを見てきましたが、予想される動作に関する情報はほとんど見つかりません。
公式ガイドから、属性を使用してキーボードアクションボタンを構成できることを理解しています:
- android:imeOptionsは、スペース キーの近くに表示されるボタンのテキスト/ID をいくつかの定義済みの値に設定できます (たとえば、actionGo はキー ラベルをGoに設定し、ID を 2 に設定します)。
- android:imeActionLabelは、キーボードがフルスクリーン (通常はランドスケープ モード) のときに入力領域内に表示されるボタンのラベルを設定します。任意の文字列値に設定できます。
- android:imeActionId前と同じですが、コールバック メソッドに渡される数値 ID を設定します
しかし、いくつかの経験的な試みの後、API レベル 15 と次の API レベルの間で異なる動作を発見しました。
次の属性を持つ単純な EditText 要素を設定しました。
<EditText
...
android:imeOptions="actionGo"
android:imeActionLabel="Custom"
android:imeActionId="666"
android:inputType="text"/>
縦向きと横向きの両方のモードで、さまざまな API レベルで効果を確認しました。これが結果です。
API レベル 15 - 4.0.3
縦向きモードでは、キー ラベルはGoで、コールバック メソッドに渡されるアクション ID は imeOptions 設定に従って 2 です。
横向きモードでは、キー ラベル/ID は縦向きモードのようにGo /2 ですが、入力領域に表示されるボタンは、imeActionLabel および imeActionId 属性に従ってカスタム/666 になります。
API レベル 16、17、および 18 - 4.1.2、4.2.2、および 4.3
縦向きと横向きの両方のモードで、キーとボタンはカスタムラベルで表示され、imeOptions 属性を無視して 666 ID にバインドされます。
この動作の不一致は、次の理由で非常に厄介です。
- API レベル >= 16 では、キー ボタンと入力領域ボタンを区別できません。
- API レベル = 15 では、キー ボタンにカスタム テキストを設定できません。
API 15 と 16+ の両方でこれを取得する方法を知っていますか? または、すべての (または少なくとも一部の) API バージョンで一貫した動作を取得する方法がある場合は?
異なる動作を正当化できる IME 設定に何かが欠けているのかもしれません...
どうもありがとうございました!