2012-10-13 174 views
4

在我的Android應用程序中,我想要一個EditTextandroid:editable="false",但光標閃爍。 「可編輯」設置爲false後,光標閃爍似乎不起作用。禁用EditText的輸入法,但保持光標閃爍

我只想使用我自己的鍵盤小部件(不是系統的軟鍵盤),並保持光標閃爍。

有什麼想法可以做到這一點嗎?

+0

我最初發布了一個答案,使用'android:inputType =「none」'。但是,現在我想到了這一點,我認爲這是不可能的。對於開發者來說,做出這樣的事情是不可能的。我建議你用你自己的觸摸監聽器製作一個自定義的'TextView'類。 – Eric

+0

你有任何問題可以通過爲EditText設置TextWatcher來解決這個問題? –

+0

Thanks @Eric,我查找TextView.shouldBlink()和TextView.onDraw(4.0.3)的源代碼,並且光標閃爍的條件是「mMovement!= null &&(isFocused()|| isPressed()) 「和isCursorVisible(),它真的需要製作一個自定義的TextView嗎?或者我們可能有一個簡單的方法? – heihei

回答

0

您可以使用XML屬性

機器人:cursorVisible = 「假」

或Java功能

setCursorVisible(假)。

,將工作

+0

他希望光標可見。此外,我不認爲這個代碼工作,如果它是不可聚焦的。 – Eric

4

也許嘗試留出的XML屬性android:editable完全然後嘗試組合下面以

,使光標閃爍阻止彈出一個原生輸入法的觸摸事件(鍵盤)..

/*customized edittext class 
* for being typed in by private-to-your-app custom keyboard. 
* borrowed from poster at http://stackoverflow.com/questions/4131448/android-how-to-turn-off-ime-for-an-edittext 
*/ 
public class EditTextEx extends EditText { 
    public EditTextEx(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    @Override 
    public boolean onCheckIsTextEditor() { 

     return false; //for some reason False leads to cursor never blinking or being visible even if setCursorVisible(true) was called in code. 
    }  
} 

步驟2 改變上述方法爲s AY return true;

步驟3 添加另一種方法上面的類。

@Override 
public boolean isTextSelectable(){ 
    return true; 
} 

步驟4 在其他地方,這個類的實例已被實例化,並呼籲viewB我添加了一個新的觸摸事件處理

viewB.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent event) { 
      viewB.setCursorVisible(true); 
      return false; 
     } 
    }); 

步驟5檢查以確保XML和或的EditText實例化代碼聲明IME /鍵盤類型爲「無」。我沒有確認相關性,但我也使用下面的可重點屬性。

<questionably.maybe.too.longofa.packagename.EditTextEx 
    android:id="@+id/editText1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:inputType="none"> 

對不起,這麼多XML屬性。我的代碼全部使用它們,在4.2.1進行測試,並有結果。

希望這會有所幫助。

+0

謝謝,完美的作品。我在Nexus 4上,操作系統是6.0.1。就我而言,「步驟5」不是必需的。 –

0

只是爲任何正在尋找和回答的人添加此方法。我已經嘗試了很多方法,但只有這一個從我工作。

public static void disableSoftKeyboard(final EditText v) { 
    if (Build.VERSION.SDK_INT >= 11) { 
     v.setRawInputType(InputType.TYPE_CLASS_TEXT); 
     v.setTextIsSelectable(true); 
    } else { 
     v.setRawInputType(InputType.TYPE_NULL); 
     v.setFocusable(true); 
    } 
} 
0

我從onCreate()調用以下內容,但是這會影響所有EditTexts。

private void hideKeyboard() 
{ 
    getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
    getWindow().setFlags (WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, 
          WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 
}