EditText
とそのイベントを考えるとOnTouch
、私はそれをオーバーライドし、trueを返しました。これにより、ソフトキーが表示されなくなります。ただし、内部の位置インデックスの内部計算も妨げEditText
ます。つまり、myEditText.getSelectionStart()
常に0を返します。
イベントのMotionEvent
引数に基づいて位置インデックスを計算する方法(または計算できるAndroid関数)はありますか?OnTouch
ありがとう。
EditText
とそのイベントを考えるとOnTouch
、私はそれをオーバーライドし、trueを返しました。これにより、ソフトキーが表示されなくなります。ただし、内部の位置インデックスの内部計算も妨げEditText
ます。つまり、myEditText.getSelectionStart()
常に0を返します。
イベントのMotionEvent
引数に基づいて位置インデックスを計算する方法(または計算できるAndroid関数)はありますか?OnTouch
ありがとう。
現在AndroidのAPIには、APIレベル14以降のgetOffsetForPosition(float x、float y)と呼ばれるソリューションがあり、エディットテキストでタッチが行われた文字の位置を取得します。これは基本的に、次のように、編集テキスト(onClickまたはonTouch)のリスナーの1つから呼び出すことができるメソッドです。
int click_position = <your_edittext>.getOffsetForPosition(event.getX(), event.getY());
ここで、eventはリスナーに渡されるMotionEventです。これにより、タッチが行われた編集テキストビューでの文字の位置がわかり、これを使用してカーソルを配置できます。
edittext.setSelection(click_position);
ただし、4.0より前のAndroidバージョン(ICS)(APIレベル13以下)を使用するデバイスでこれを機能させる場合、このAPIは使用できません。ただし、利用可能な他のAPIを使用して、14未満のAPIバージョン用に独自のメソッドを開発できます(これは、基本的にGoogleがAPIレベル14から行ったことです)。私はそれを行い、motioneventからedittextの位置インデックスを正常に取得することができました。基本的に、AndroidでAPIレベル1から利用できる他のAPI呼び出しから、同じ名前の静的メソッドをコンパイルしました。古いAPIレベルのコードを今すぐ投稿する必要があるかどうかはわかりません。興味があれば、ここにコードを投稿します。
SOを検索してグーグルした後、解決策が明確ではないことがわかりました。だから私は妥協してそれを解決しました。
ユーザーがカーソルを移動できるキーボードの右/左矢印を指定します。私のキーボードが表示されているときにユーザーが編集テキストをタップすると、トーストが表示され、自分がやろうとしていることにキーボードを使用するように指示されます。
この質問は1年前のものだと思いますが、現在同じことをしようとしています。私の推論は、ローカライズされたnumberDecimal EditText入力を処理するための優れたソリューションが必要であるということです。これは、Androidがネイティブではうまく機能しません:http ://code.google.com/p/android/issues/detail?id=2626およびすべてのスレッドその問題に対処しようとしているSOでは、Samsungのようなメーカーが「数字」パラメーターを取得できない場合は機能しません。
これは、フィールド内のonTouchイベントをカーソル位置に変換するための最終的なコードではありませんが、約30分前に開始したばかりなので、これを行うためのR&Dを行っています。
それはわずかに機能します。さまざまな画面の除数パラメーターを計算する方法を理解する必要があります。16の値は、私の小さな古い電話には適していますが、密度の高い7インチのタブレットには適していません。
[編集:私がテストしたデバイスでうまく機能します。これがより多くのデバイスに当てはまるかどうかを判断するには早すぎます。]
myField.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent me) {
if (me.getAction() == MotionEvent.ACTION_DOWN) {
try {
float dp = App.get().getResources().getDisplayMetrics().density;
int div = (int) (10 * dp);
int x = (int) me.getX();
int pos = (v.getWidth() - x) / div;
int strlen = ((EditText)v).getText().toString().length();
int curpos = strlen - pos;
v.requestFocus();
if (curpos < 0) {
((EditText)v).setSelection(0);
} else {
((EditText)v).setSelection(curpos);
}
} catch (Exception e) {
Log.w(App.TAG, "onTouch exception " + e.toString());
}
}
return true;
}
});