2017-11-23 5 views
0

inputType、singleLine、maxLinesの組み合わせを試しましたが、私が望む動作を得ることができません。EditTextで改行(Enterキー)を無効にしますが、長い文字列に対しては垂直に展開してください。

基本的には、EditTextを新しい行が許可されていない単一の文字列にしたいのですが、文字列が初期サイズよりも長い場合は、垂直方向にも展開します。 (すべてのテキストを画面に表示する必要があります)

textMultiLineは、文字列が長い場合には展開されますが、改行文字は使用できません。この場合、singleLineは何の効果もありません。また、maxLinesは新しい線を作成できる間にボックスのサイズを変更するだけです。

textMultiLine以外のものは垂直方向に展開されず、長すぎるとテキストが水平方向にスクロールされます。

+1

テキストの変更を聞き、テキストに改行文字( '\ n')が含まれているかどうかを確認し、空白(または何もない)に置き換えて何かが変更された場合にテキストを設定します。 – Zoe

+0

これは現在私がやっていることです。もっと良い方法はありませんか?私はプロジェクト全体で10以上の場所にこの種の入力を持っています。 – Kidades

答えて

0

私のコメントで既に述べたように、TextWatcherを使って変更を聞きます。残念ながら、(この回答を書いている時点で)これを行う他の方法はありません。あなたの2番目のコメントによると、ここでは最適化の提案です。

リスナーはクラスでも、スタンドアロンクラスでもかまいません。現在のクラスまたは匿名の内部クラスである必要はありません。

public class SingleLineET implements TextWatcher { 
    EditText et; 

    public SingleLineET(EditText et){ 
     this.et = et; 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     String converted = s.toString(); 
     if(converted.contains("\n")){ 
      //There are occurences of the newline character 
      converted = converted.replace("\n", ""); 
      et.setText(converted); 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
} 

をそして、あなたがリスナーを持ちたいwhereever、あなたは単に実行します:たとえば、あなたはこのようなクラスを作成することができます

EditText theET = ...; 
theET.addTextChangedListener(new SingleLineET(theET)); 

をそして、あなたは場所の量を削減することを好むあなた同じボイラープレートコードが必要です。

は、Androidの今後のリリースにおけるいくつかの代替があってもよい(または誰かがこれを自動化ビューを作成する)が、それまで、そのための手動作成コードの代わりにクラスを使用するたびに、少なくともいくつかの行をダウンカット

関連する問題