2012-04-22 31 views
1

鑑於EditText及其OnTouch事件,我重寫了它,並返回true。這可以防止軟鍵出現。但它也可以防止內部計算EditText內部的位置指數。也就是說myEditText.getSelectionStart()將返回總是0MotionEvent在EditText中的位置索引

有沒有一種方法來計算(或Android功能,可以計算)的基礎上OnTouch事件的MotionEvent參數的位置索引?

謝謝。

+0

你能否更廣泛地描述你想要達到的目標?我有一個軟鍵盤設備,所以我不能發誓,但我懷疑一個硬鍵盤設備會彈出一個軟 - 因此,我想你試圖阻止一個軟鍵盤設備彈出它......但有什麼用處是EditText如果用戶不能輸入它?也許另一個小部件可能更有用?因此,爲什麼你更好地對你的想法給予更廣泛的看法。最好的祝福。 – pouzzler 2012-04-22 10:15:00

+0

嗨,@pouzzler,我的確想要防止軟性kesy出現,而是顯示我自己的鍵,這些鍵很少,並且包含某些字符(大約12個特定鍵)。我可以模仿軟鍵沒有問題,除了觸摸設置光標位置。 – 2012-04-22 10:59:33

回答

0

經過搜索和谷歌搜索後,我明白解決方案並不清楚。 所以我通過妥協解決了它。

我在我的鍵盤上提供用戶可以移動光標的右/左箭頭。 如果用戶在顯示鍵盤時點擊編輯文本,他將得到一個Toast,告訴他使用鍵盤來做他想做的事情。

0

我意識到這個問題已經有一年了,但我目前正在嘗試做同樣的事情。我的理由是,我需要一個很好的解決方案來處理本地化數字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; 
     } 
    }); 
+0

您可以使用'(int)((EditText)v).getPaint()。measureText(「0」)'來確定符號長度,如果View是EditText – wingear 2017-05-18 14:51:04

1

有一個在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)(AP​​I等級13或更低),此API不可用。但是,您可以使用其他可用的API(這實質上是Google從API級別14執行的操作)爲14以下的API版本開發自己的方法。 我做到了這一點,並能夠成功地從motionevent獲得編輯文本上的位置索引。我基本上編譯了一個具有相同名稱的靜態方法,來自API中的其他API調用。我不確定是否需要現在發佈舊API級別的代碼。如果有興趣,我會在這裏發佈代碼。