2016-03-31 21 views
11

私はメッセージ(電子メール、SMS)の内容を入力するために使用されるEditTextを持っています。 ActionDoneボタンをクリックするとすぐにメッセージを投稿します。私はこのために、次のコードを使用しますActionDoneボタン(Enterボタンなし)で複数行編集テキストを実装する方法

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ボタンがEnterボタンのように動作する問題があります。したがって、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

続きルスランの答え。このトリックはうまくいったが、もう1つXMLで世話をする必要がある。

EditTextの入力タイプはtextでなければなりません。actionDoneは機能しません。 EditTextのデフォルトの入力タイプは、入力ラインにユーザーがそうinputTypeが

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

すなわちtextに設定する必要がありますし、Javaクラスに追加する必要が壊れることができない:

editText.setHorizontallyScrolling(false); 
+0

inputType = text&imeOptions = actionDoneはxmlで、setHorizo​​ntallyScrolling()はコード内で行いました!最後にありがとう。 – Borzh

15

使用

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

およびXML:

android:inputType="textMultiLine" 

ソース:Multi-line EditText with Done action button

+1

これは私のために働いただけで、魅力的に機能しました.Doneボタンが表示され、動作し、EditTextが最初に空のときに1行しか表示されず、ユーザーが入力するか、コード(setText)から。 – javaxian

+5

ソースを引用するのはいいと思います。http://stackoverflow.com/a/41022589/4607733 – horcrux

+1

時間を検索していただきありがとうございます。あなたは正しいと思いますが、xmlを変更しても機能しません。何が混乱... – Annihil