2014-01-20 108 views
1

我想限制每行字符为15个字符。在每隔15个字符之后,我应该在该行中包含/添加一个“输入”键(“\ n”),以便用户可以不停止写入。任何建议?如何限制多行编辑文本中每行的字符?

这是我EditText XML

<EditText 
     android:id="@+id/ET" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:ems="10" 
     android:maxLength="20" 
     android:inputType="textMultiLine" 
     android:visibility="gone" /> 

这是我的ET TextChangedListener

ET.addTextChangedListener(new TextWatcher(){ 
     @Override 
     public void afterTextChanged(Editable s) {} 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) {} 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      if (count % 20 == 0) 
      { 
       ((Editable) s).append("\n"); 
       ET.setSelection(ET.getText().length()); 
      } 

     } 
    }); 
+0

为什么不以编程方式编写此代码?当它达到15个字符时,则换行 – lantonis

+0

@lantonis,因为它不会改变。它包含“\ n”,但即使试图将光标移动到末尾时,它仍停留在该行的末尾 –

+0

http://stackoverflow.com/questions/10933412/how-to-set-maximum -characters-per-line-for-text-view-in-android –

回答

0

你需要一个定制Text Watcher这里,请大家帮忙从下面的模板:

private class CustomTextWatcher implements TextWatcher { 
private EditText recieved_et; 

public CustomTextWatcher(EditText e) { 
    recieved_et = e; 
} 

public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 
     //Your Implementation 
} 

public void onTextChanged(CharSequence s, int start, int before, 
     int count) 
{ 
    if (count % 20 == 0) 
    { 
     ((Editable) s).append("\n"); 
     recieved_et.setText(s.toString()); 
    } 
} 

public void afterTextChanged(Editable s) { 
     //Your Implementation 
    } 
} 

下面是你如何设置这个y我们的Edit Text

ET.addTextChangedListener(new CustomTextWatcher(ET));
我希望这会有所帮助。

+0

这不起作用,它会限制我的整个长度为20,而不是20行。 –

+0

我不理解你。你只想显示一些你的行数为20个字符? –

+0

不,我想限制每行20个字符,而不是全文的长度。 –

0

您必须以编程方式将TextWatcher添加到EditText

onTextChanged()函数中,您可以获取文本,如果最后一行的长度为20个字符,则使用s.append("\n");函数。

您还需要实现我认为的删除功能。如果用户删除"\n"字符,则还需要删除前一个字符。

您还需要注意该功能,因为它很容易卡在infinite loop中。

+0

这正是我以前的尝试,但即使在包括'ET.setSelection(ET.getText()。length());'光标不移动到下一行 –

+0

您可以发布代码。我认为没有别的办法。我们可以追求你的实施。 – tasomaniac

+0

完成后,请检查我的编辑 –