2012-01-12 31 views
10

EditTextウィジェットでSingleLine = trueを設定すると、ユーザーがハードリターンを挿入できないような1行の編集コントロールが表示されます新しい行を挿入するのではなく、次のフィールド)。 SingleLine = trueを設定しないと、ユーザーはハードリターンを挿入できます。単語の折り返しがあるが、ハードリターンのないAndroid EditText

layout_height = "wrap_content"に設定すると、EditTextコントロールが縦に伸びてすべてのテキストが表示されます。ただし、SingleLineがtrueに設定されていない場合にのみこれが実行されます。

私の質問は、ユーザーが改行を入力することを許さずに、ワードラップと垂直サイズ変更を得ることですか?私はEnterキーを押さえることができたと思うが、それから他の方法でキャッチしなければならないだろう。プロパティの適切な組み合わせでこれを行う簡単な方法はありますか?

1行編集コントロールの水平スクロールに比べて、ユーザーがすべてのテキストを見ることができるワードラップが好きですが、複数行のテキストを入力できると思っているとは思わないそれをサポートする必要はありません)。私はデータベースにデータを保存するときにハードリターンをスペースに変換するかもしれないと思う。(PC上のこのデータをシンクするレガシーアプリはハードリターンを処理できない)。

答えて

12

私もこれを行うための何かを探していました。

 <com.kylemilligan.test.NoNewlineEditText 
      android:id="@+id/noNewLineText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="top|left" 
      android:imeOptions="actionDone" 
      android:minLines="5" /> 

・ホープ、このことができます:のようなXMLを使用している

package com.kylemilligan.test; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.inputmethod.EditorInfo; 
import android.view.inputmethod.InputConnection; 
import android.widget.EditText; 

public class NoNewlineEditText extends EditText 
{ 

    public NoNewlineEditText(Context context) { 
     super(context); 
    } 

    public NoNewlineEditText(Context context, AttributeSet attributeSet) { 
     super(context, attributeSet); 
    }  

    @Override 
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) 
    { 
     InputConnection connection = super.onCreateInputConnection(outAttrs); 
     int imeActions = outAttrs.imeOptions & EditorInfo.IME_MASK_ACTION; 
     if ((imeActions & EditorInfo.IME_ACTION_DONE) != 0) 
     { 
      // clear the existing action 
      outAttrs.imeOptions ^= imeActions; 
      // set the DONE action 
      outAttrs.imeOptions |= EditorInfo.IME_ACTION_DONE; 
     } 
     if ((outAttrs.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) 
     { 
      outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION; 
     } 
     return connection; 
    } 
} 

そしてを:私が見つけた唯一の解決策は、次のようにのEditTextを拡張しました!

+0

ので便利。なぜ私はこれがビルトインの行動として提供されていないのかわかりません。 – JulianSymes

+6

これは、Androidが複数行のテキストビューで自動的に 'EditorInfo.IME_FLAG_NO_ENTER_ACTION'を設定するために機能します。あなたはこれを単純化することができます: 'InputConnection connection = super.onCreateInputConnection(outAttrs); outAttrs.imeOptions&=〜(EditorInfo.IME_FLAG_NO_ENTER_ACTION); リターン接続; ' – Foxichu

3

私はこれに興味があり、組み込みのAndroidメッセージングアプリがソフトキーボードのEnterキーを使わずにテキストをラップしていることに気付きました。ソースレイアウトhereによれば、以下のオプションがあります。すべてが必要なわけではありません。私は鍵がtextShortMessagetextMultiLine、およびflagNoEnterActionを持つことであると信じて:

android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine" 
android:imeOptions="actionSend|flagNoEnterAction" 
+0

これは私が見た他のものと比較して優れた解決策です。 – bond

+0

ほぼ。私はこのソリューションを使用できませんでした。なぜなら、私が 'actionDone'を使用できるようには見えないからです。私はエモジス、またはそのようなものは欲しくない。私はちょうど「完了」アクションが必要なので、このソリューションでは動作させることはできません。 –

0
editText.setImeOptions(EditorInfo.IME_ACTION_DONE); 
//This will treat Enter as Done instead of new line: 
editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 

And in XML: 
android:inputType="textMultiLine" 
関連する問題