2011-04-07 143 views

回答

273

您可以使用xml屬性android:cursorVisible="false"或java函數setCursorVisible(false)

+7

真棒,這連同onclicklistener,使得它可見給出了正確的行爲:) – Warpzit 2012-04-27 08:59:17

+0

機器人:cursorVisible =「假「(爲我工作。謝謝) – 2013-05-15 09:45:41

+0

@cerin有沒有辦法隱藏藍色標記,所以我可以禁用粘貼,但保持光標可見,以便用戶可以看到他在現場的位置? – limlim 2014-08-21 14:05:57

23

完美的解決方案進一步朝目標

目標:禁用閃爍光標的時候EditText沒有焦點,並啓用閃爍的光標時EditText對焦。當點擊EditText時,下面也會打開鍵盤,並在鍵盤上按完成時隱藏它。

1)設置在你的XML在你EditText

android:cursorVisible="false" 

2)設置onClickListener:

iEditText.setOnClickListener(editTextClickListener); 

OnClickListener editTextClickListener = new OnClickListener() 

{ 

    public void onClick(View v) 
    { 
     if (v.getId() == iEditText.getId()) 
     { 
      iEditText.setCursorVisible(true); 
     } 

    } 
}; 

3)然後onCreate,在完成時使用OnEditorActionListener壓到你的EditText捕獲事件,然後setCursorVisible(false)

//onCreate... 

iEditText.setOnEditorActionListener(new OnEditorActionListener() { 

      @Override 
      public boolean onEditorAction(TextView v, int actionId, 
        KeyEvent event) { 
        iEditText.setCursorVisible(false); 
       if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { 
        InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 
       } 
       return false; 
      } 
     }); 
+5

KeyEvent.KEYCODE_ENTER不適用於所有鍵盤。您需要在佈局中特別提及android:imeOptions =「actionDone」,然後再處理EditorInfo.IME_ACTION_DONE。 – PsyGik 2014-12-01 08:31:39

+0

很好的回答只需要點擊觸摸取代,因爲一些時間編輯文本獲得焦點沒有點擊,所以在這種情況下,光標不會顯示 – Tony 2016-02-18 11:26:38

1

就我而言,我希望當編輯集中啓用/禁用光標。

在你的活動:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     View v = getCurrentFocus(); 
     if (v instanceof EditText) { 
      EditText edit = ((EditText) v); 
      Rect outR = new Rect(); 
      edit.getGlobalVisibleRect(outR); 
      Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY()); 
      System.out.print("Is Keyboard? " + isKeyboardOpen); 
      if (isKeyboardOpen) { 
       System.out.print("Entro al IF"); 
       edit.clearFocus(); 
       InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(edit.getWindowToken(), 0); 
      } 

      edit.setCursorVisible(!isKeyboardOpen); 

     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 
+0

很確定你想'編輯.setCursorVisible(!isKeyboardOpen);'編輯。 setCursorVisible(isKeyboardOpen);'使鍵盤出現時光標可見。 – 2017-04-10 18:19:52

2

您可以使用啓用和以編程方式禁用編輯文本光標下面的代碼。

啓用光標

editText.requestFocus(); 
    editText.setCursorVisible(true); 

禁用光標

editText.setCursorVisible(false); 

使用XML啓用禁用光標

android:cursorVisible="false/true" 
    android:focusable="false/true" 

爲了使edit_text可選擇至(複製/剪切/粘貼/選擇/選擇所有)

editText.setTextIsSelectable(true); 

把重點放在觸摸模式寫入以下在XML線

android:focusableInTouchMode="true" 
    android:clickable="true" 
    android:focusable="true" 

編程

editText.requestFocusFromTouch(); 

要明確重點觸控模式

editText.clearFocus()