2016-03-31 104 views
11

我有用於在郵件(電子郵件,短信)上輸入內容的EditText。我希望消息立即發佈在ActionDone按鈕上。我用下面的代碼是:如何使用ActionDone按鈕實現Multiline EditText(無需輸入按鈕)

message.setOnEditorActionListener((textView, i, keyEvent) -> { 
      switch (i) { 
       case EditorInfo.IME_ACTION_DONE: 
        if (messageCanBePosted()) { 
         SoftKeyboard.hide(message); 
         postMessage(); 
         return true; 
        } else { 
         return false; 
        } 
       default: 
        return false; 
      } 
     }); 

而且我想這個消息字段設置爲多,像任何其他應用程序的使者。我可以用這條線實現它:

android:inputType="textMultiLine" 

的問題是,加入這一行後ActionDone按鈕開始像個回車鍵。所以我從來沒有調用回調EditorInfo.IME_ACTION_DONE。所以每次用戶按下該按鈕光標移動到新行而不是發佈消息。

如何保持EditText的多行爲(能夠在多行上顯示文本)和ActionDone按鈕?

回答

24

最後,在這裏搜索相似的線程後,我找到了解決方案。只需要在你的活動/片段添加這些行:

editText.setHorizontallyScrolling(false); 
editText.setMaxLines(Integer.MAX_VALUE); 

出於某種原因,如果從XML應用完全相同的設置這是行不通的。你應該通過編程來完成。

還有另一種可能的解決方案 - 從EditText派生並手動應用EditorInfo.IME_ACTION_DONE。但對我來說,第一個解決方案看起來更簡單

+0

你確定這裏的工作?我無法使它工作 – silverFoxA

+0

@silverFox是的,它爲我工作。你在xml中爲你的EditText定義了哪些屬性? – Ruslan

+0

感謝它的工作 – silverFoxA

13

繼續Ruslan的回答。這個技巧很有效,但還有一件事你需要在XML中處理。

EditText應該有輸入類型text否則actionDone將無法​​正常工作。的EditText默認輸入型確實允許用戶輸入換行符這樣的inputType應設置爲text

android:inputType="text" 
//And of course 
android:imeOptions="actionDone" 

而且在你的java類,你需要添加:

editText.setHorizontallyScrolling(false); 
+0

inputType = text&imeOptions = actionDone in the xml and setHorizo​​ntallyScrolling()in the code did it!謝謝,最後。 – Borzh

15

使用

editText.setImeOptions(EditorInfo.IME_ACTION_DONE); 
editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 

and in XML:

android:inputType="textMultiLine" 

來源:Multi-line EditText with Done action button

+1

只有這個爲我工作,它像一個魅力 - 完成按鈕顯示和工作,只有一行可見,當一個EditText最初是空的,並擴大到更多的行,當用戶鍵入或有更多的文本最初添加來自代碼(setText)。 – javaxian

+5

這將是很好的引用來源:http://stackoverflow.com/a/41022589/4607733 – horcrux

+1

謝謝你,搜索了幾個小時後,你是對的,它不工作,只能通過更改xml。多麼糟糕...... – Annihil