如何在 android 的 edittext 上设置最大长度消息
How to set max lenght message on edittext on android
我想做的是在编辑文本上设置最大字符数。到目前为止,我已经找到了 TextInputLayout,但它并不是我所需要的。 edittext 是一个很大的字段,所以我试图在 edittex 的右下角设置一条消息,上面写着“最大输入 120”,但在 edittext 内部,而不是在外部。这是我目前所拥有的
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_title"
android:layout_width="match_parent"
android:layout_height="350dp"
app:counterEnabled="true"
app:counterMaxLength="120"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edtComnent"
android:layout_width="match_parent"
android:layout_height="300dp"
android:hint="write your comments here"
android:textSize="@dimen/font_size_2"
android:gravity="top"
android:padding="15dp"
android:maxLength="120"/>
</com.google.android.material.textfield.TextInputLayout>
但是就像我说的,它不太符合我的需求。
任何帮助或建议都会很棒,谢谢
你可以使用下面的代码
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="4dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="4dp"
android:ems="10"
android:hint="EditText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/editText"
android:layout_centerInParent="true"
android:text="Count Display Here"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/editText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
java代码
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
int length = editText.length();
String convert = String.valueOf(length);
textView.setText(convert);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) { }
});
我认为,我们在 android 中没有内置系统。
我可以建议的一件事是创建一个 TextView,它位于 EditText 之上的任何位置。
在代码中,实现 TextWatcher 来计算输入的字符数并相应地更新计数器 TextView。
你可以这样做:
您可以根据需要调整文本大小、边距和填充。这只是一个想法。
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:paddingRight="15dp"
/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@id/editText"
app:layout_constraintEnd_toEndOf="@id/editText"
android:text="0"
android:textSize="10sp"
android:layout_marginBottom="10dp"
android:layout_marginRight="5dp"/>
代码中:
如果您想显示输入的字符数,请使用此代码:
editText = findViewById(R.id.editText)
textView = findViewById(R.id.textView)
var characterCount = 0
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
characterCount++
textView.text = characterCount.toString()
}
override fun afterTextChanged(p0: Editable?) {
}
})
结果:
Click to See ScreenShot
或
如果你想显示这样的文字 'max : 300':
editText = findViewById(R.id.editText)
textView = findViewById(R.id.textView)
var textToShow = "max : 300"
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
textView.text = textToShow
//Here you might need to set up the padding for edittext accordingly
//so as not to be typed over the text 'max : 300'
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun afterTextChanged(p0: Editable?) {
}
})
或
如果你想显示这样的内容: 剩余 53 个字符
editText = findViewById(R.id.editText)
textView = findViewById(R.id.textView)
var maxAllowed = 300
var characterCount = 0
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
characterCount++
var characterRemaining = maxAllowed - characterCount
textView.text = "$characterRemaining characters remaining"
}
override fun afterTextChanged(p0: Editable?) {
}
})
试试这个
<RelativeLayout
android:id="@+id/til_title"
android:layout_width="264dp"
android:layout_height="136dp"
android:layout_marginTop="15dp"
app:counterEnabled="true"
app:layout_constraintBottom_toTopOf="@+id/btnCancelComment"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
tools:ignore="MissingConstraints">
<EditText
android:id="@+id/edtComment"
android:layout_width="match_parent"
android:hint="Escriba sus comentarios aquí. "
android:gravity="top"
android:textSize="@dimen/font_size_2"
android:layout_height="120dp"
android:maxLength="121"
android:background="@drawable/rounded_gray_background"/>
<TextView
android:id="@+id/tv"
android:layout_below="@id/edtComment"
android:layout_width="match_parent"
android:layout_height="30dp"
android:gravity="end"
android:paddingEnd="10dp"
android:textStyle="normal|italic"
android:textSize="@dimen/font_size_2"
android:text="Máx 120 carácteres"
android:background="@drawable/rounded_gray_background"/>
</RelativeLayout>
我想做的是在编辑文本上设置最大字符数。到目前为止,我已经找到了 TextInputLayout,但它并不是我所需要的。 edittext 是一个很大的字段,所以我试图在 edittex 的右下角设置一条消息,上面写着“最大输入 120”,但在 edittext 内部,而不是在外部。这是我目前所拥有的
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_title"
android:layout_width="match_parent"
android:layout_height="350dp"
app:counterEnabled="true"
app:counterMaxLength="120"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edtComnent"
android:layout_width="match_parent"
android:layout_height="300dp"
android:hint="write your comments here"
android:textSize="@dimen/font_size_2"
android:gravity="top"
android:padding="15dp"
android:maxLength="120"/>
</com.google.android.material.textfield.TextInputLayout>
但是就像我说的,它不太符合我的需求。 任何帮助或建议都会很棒,谢谢
你可以使用下面的代码
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="4dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="4dp"
android:ems="10"
android:hint="EditText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/editText"
android:layout_centerInParent="true"
android:text="Count Display Here"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/editText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
java代码
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
int length = editText.length();
String convert = String.valueOf(length);
textView.setText(convert);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) { }
});
我认为,我们在 android 中没有内置系统。 我可以建议的一件事是创建一个 TextView,它位于 EditText 之上的任何位置。 在代码中,实现 TextWatcher 来计算输入的字符数并相应地更新计数器 TextView。
你可以这样做: 您可以根据需要调整文本大小、边距和填充。这只是一个想法。
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:paddingRight="15dp"
/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@id/editText"
app:layout_constraintEnd_toEndOf="@id/editText"
android:text="0"
android:textSize="10sp"
android:layout_marginBottom="10dp"
android:layout_marginRight="5dp"/>
代码中: 如果您想显示输入的字符数,请使用此代码:
editText = findViewById(R.id.editText)
textView = findViewById(R.id.textView)
var characterCount = 0
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
characterCount++
textView.text = characterCount.toString()
}
override fun afterTextChanged(p0: Editable?) {
}
})
结果:
Click to See ScreenShot
或 如果你想显示这样的文字 'max : 300':
editText = findViewById(R.id.editText)
textView = findViewById(R.id.textView)
var textToShow = "max : 300"
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
textView.text = textToShow
//Here you might need to set up the padding for edittext accordingly
//so as not to be typed over the text 'max : 300'
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun afterTextChanged(p0: Editable?) {
}
})
或 如果你想显示这样的内容: 剩余 53 个字符
editText = findViewById(R.id.editText)
textView = findViewById(R.id.textView)
var maxAllowed = 300
var characterCount = 0
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
characterCount++
var characterRemaining = maxAllowed - characterCount
textView.text = "$characterRemaining characters remaining"
}
override fun afterTextChanged(p0: Editable?) {
}
})
试试这个
<RelativeLayout
android:id="@+id/til_title"
android:layout_width="264dp"
android:layout_height="136dp"
android:layout_marginTop="15dp"
app:counterEnabled="true"
app:layout_constraintBottom_toTopOf="@+id/btnCancelComment"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
tools:ignore="MissingConstraints">
<EditText
android:id="@+id/edtComment"
android:layout_width="match_parent"
android:hint="Escriba sus comentarios aquí. "
android:gravity="top"
android:textSize="@dimen/font_size_2"
android:layout_height="120dp"
android:maxLength="121"
android:background="@drawable/rounded_gray_background"/>
<TextView
android:id="@+id/tv"
android:layout_below="@id/edtComment"
android:layout_width="match_parent"
android:layout_height="30dp"
android:gravity="end"
android:paddingEnd="10dp"
android:textStyle="normal|italic"
android:textSize="@dimen/font_size_2"
android:text="Máx 120 carácteres"
android:background="@drawable/rounded_gray_background"/>
</RelativeLayout>