android如何使edittext中的文本完全固定行
我想允许use只输入5行,我尝试了这个android如何使edittext中的文本完全固定行,android,android-edittext,Android,Android Edittext,我想允许use只输入5行,我尝试了这个 <EditText android:layout_below="@+id/tv_signup_descriptionError" android:id="@+id/et_signup_description" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dip
<EditText
android:layout_below="@+id/tv_signup_descriptionError"
android:id="@+id/et_signup_description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:hint="@string/et_hint_enterDescription"
android:singleLine="false"
android:lines="5"
android:gravity="top"
android:scrollHorizontally="false"
android:inputType="textMultiLine"
android:maxLines="5"/>
但我仍然可以在第五行之后按Enter键,maxLines属性用于限制编辑文本的高度。要限制最大行数,必须在代码中自己完成。不能使用任何XML属性
maxlines
表示编辑文本的最大高度
,而不表示输入行数
但是,您可以实现自己的代码来检查行数
以下代码不是我自己的代码,而是取自
@Swayam您是对的,但此解决方案已得到改进: 1-更好的性能 2-在您的解决方案中,如果您输入了7行(最大输入行),然后在顶行中按enter键,最后一行将被删除,但在此解决方案中,“enter”键已被忽略。
mEditText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
if ( ((EditText)v).getLineCount() >= 7 )
return true;
}
return false;
}
});
/**要设置的最大行数*/
public void afterTextChanged(Editable editable) {
int lines = mEditText.getLineCount();
if (lines > MAX_LINES) {
String s = editable.toString();
int start = mEditText.getSelectionStart();
int end = mEditText.getSelectionEnd();
if (start == end && start < s.length() && start > 1) {
s = s.substring(0, start - 1) + s.substring(start);
} else {
s = s.substring(0, s.length() - 1);
}
mEditText.setText(s);
mEditText.setSelection(mEditText.getText().length());
// Toast.makeText(RatingActivity.this, "max line set to MAX_LINES", Toast.LENGTH_SHORT).show();
}
public void-afterextchanged(可编辑){
int lines=mEditText.getLineCount();
如果(线>最大线){
字符串s=可编辑的.toString();
int start=mEditText.getSelectionStart();
int end=mEditText.getSelectionEnd();
如果(开始==结束和开始1){
s=s.子串(0,开始-1)+s.子串(开始);
}否则{
s=s.substring(0,s.length()-1);
}
mEditText.setText(s);
mEditText.setSelection(mEditText.getText().length());
//Toast.makeText(RatingActivity.this,“最大行设置为最大行”,Toast.LENGTH\u SHORT.show();
}
这段代码用于将EditText最大行数限制设置为最大行数。当我第一次按enter键时,您的代码使EditText为空,为什么?
((EditText)v)。setText(“”;
如果不需要,请删除此部分。抱歉,您的代码不起作用:(,在第五行之后,我仍然可以按enter
如果您不知道,请不要担心,我可以开始新的quesiton@FernadoMargin:我想我会非常感激的。因为到目前为止,我真的没有时间调试代码。我自己甚至都没有试过。也许我会在以后的某个时候看一看。现在得赶紧了。对不起。这个解决方案错过了通过代码调用setText的情况。作为doc,这仅适用于硬件键盘。谢谢!可能重复此代码。请尝试此代码
public void afterTextChanged(Editable editable) {
int lines = mEditText.getLineCount();
if (lines > MAX_LINES) {
String s = editable.toString();
int start = mEditText.getSelectionStart();
int end = mEditText.getSelectionEnd();
if (start == end && start < s.length() && start > 1) {
s = s.substring(0, start - 1) + s.substring(start);
} else {
s = s.substring(0, s.length() - 1);
}
mEditText.setText(s);
mEditText.setSelection(mEditText.getText().length());
// Toast.makeText(RatingActivity.this, "max line set to MAX_LINES", Toast.LENGTH_SHORT).show();
}