如何在 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>