鑑於EditText
及其OnTouch
事件,我重寫了它,並返回true。這可以防止軟鍵出現。但它也可以防止內部計算EditText
內部的位置指數。也就是說myEditText.getSelectionStart()
將返回總是0MotionEvent在EditText中的位置索引
有沒有一種方法來計算(或Android功能,可以計算)的基礎上OnTouch
事件的MotionEvent
參數的位置索引?
謝謝。
鑑於EditText
及其OnTouch
事件,我重寫了它,並返回true。這可以防止軟鍵出現。但它也可以防止內部計算EditText
內部的位置指數。也就是說myEditText.getSelectionStart()
將返回總是0MotionEvent在EditText中的位置索引
有沒有一種方法來計算(或Android功能,可以計算)的基礎上OnTouch
事件的MotionEvent
參數的位置索引?
謝謝。
經過搜索和谷歌搜索後,我明白解決方案並不清楚。 所以我通過妥協解決了它。
我在我的鍵盤上提供用戶可以移動光標的右/左箭頭。 如果用戶在顯示鍵盤時點擊編輯文本,他將得到一個Toast,告訴他使用鍵盤來做他想做的事情。
我意識到這個問題已經有一年了,但我目前正在嘗試做同樣的事情。我的理由是,我需要一個很好的解決方案來處理本地化數字DecimalEditText輸入,Android本身並不能很好地執行:http://code.google.com/p/android/issues/detail?id=2626並且所有試圖解決該問題的線程都無法在三星等製造商採用「數字」參數。
這不是用於將字段中的onTouch事件轉換爲光標位置的最終代碼,但是我剛剛在半小時前開始,所以這裏是我在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;
}
});
您可以使用'(int)((EditText)v).getPaint()。measureText(「0」)'來確定符號長度,如果View是EditText – wingear 2017-05-18 14:51:04
有一個在Android的API的今天呼籲getOffsetForPosition(浮法X,浮法Y),因爲API 14級的解決方案,以獲得字符位置,觸摸是在edittext上製作的。它基本上是你可以從裏面你的聽衆爲如下的EditText(的onClick或onTouch)的一個調用的方法:
int click_position = <your_edittext>.getOffsetForPosition(event.getX(), event.getY());
,其中事件是MotionEvent傳遞到聽者。 這給出了在該觸摸被做了的EditText視圖中的字符的位置,使用哪一個可以使用
edittext.setSelection(click_position);
定位光標但是,如果你希望它是採用Android版本較早的設備上工作比4.0(ICS)(API等級13或更低),此API不可用。但是,您可以使用其他可用的API(這實質上是Google從API級別14執行的操作)爲14以下的API版本開發自己的方法。 我做到了這一點,並能夠成功地從motionevent獲得編輯文本上的位置索引。我基本上編譯了一個具有相同名稱的靜態方法,來自API中的其他API調用。我不確定是否需要現在發佈舊API級別的代碼。如果有興趣,我會在這裏發佈代碼。
你能否更廣泛地描述你想要達到的目標?我有一個軟鍵盤設備,所以我不能發誓,但我懷疑一個硬鍵盤設備會彈出一個軟 - 因此,我想你試圖阻止一個軟鍵盤設備彈出它......但有什麼用處是EditText如果用戶不能輸入它?也許另一個小部件可能更有用?因此,爲什麼你更好地對你的想法給予更廣泛的看法。最好的祝福。 – pouzzler 2012-04-22 10:15:00
嗨,@pouzzler,我的確想要防止軟性kesy出現,而是顯示我自己的鍵,這些鍵很少,並且包含某些字符(大約12個特定鍵)。我可以模仿軟鍵沒有問題,除了觸摸設置光標位置。 – 2012-04-22 10:59:33