88

Tôi đã tự hỏi cách tốt nhất để làm số lượng ký tự trực tiếp của hộp văn bản chỉnh sửa là trong Android. Tôi đã xem xét điều này nhưng dường như tôi không thể hiểu được ý nghĩa của nó.

Để mô tả sự cố, tôi có EditText và tôi đang cố giới hạn các ký tự ở mức 150. Tôi có thể làm điều này với bộ lọc đầu vào, tuy nhiên tôi muốn hiển thị ngay bên dưới hộp văn bản số lượng ký tự mà người dùng đã nhập (Hầu như như stack overflow đang làm ngay bây giờ).

Nếu ai đó có thể viết một đoạn mã ví dụ nhỏ hoặc chỉ cho tôi đi đúng hướng, tôi sẽ đánh giá cao nó rất nhiều.

|
143

bạn có thể sử dụng TextWatcher để xem khi văn bản thay đổi

private TextView mTextView;
private EditText mEditText;
private final TextWatcher mTextEditorWatcher = new TextWatcher() {
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
           //This sets a textview to the current length
           mTextView.setText(String.valueOf(s.length()));
        }

        public void afterTextChanged(Editable s) {
        }
};

bạn đặt TextWatcher cho edittext với

mEditText.addTextChangedListener(mTextEditorWatcher);
|
92

Bạn có thể thực hiện đếm ký tự từ chính xml bằng cách sử dụng trình bao bọc TextInputLayout cho EditText được giới thiệu trong SupportL Library v23.1

Chỉ cần bọc EditText của bạn bằng TextInputLayout và đặt CounterEnables thành true và Đặt counterMaxLpm.

<android.support.design.widget.TextInputLayout
    android:id="@+id/textContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:counterEnabled="true"
    app:counterMaxLength="20"
    >
    <EditText
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Text Hint"
        />
</android.support.design.widget.TextInputLayout>

Bạn sẽ có được một hiệu ứng vật chất như thế này

Bạn có thể sử dụng counterOverflowTextAppparent , counterTextAppparent để tạo kiểu cho bộ đếm.

CHỈNH SỬA

Từ tài liệu Android.

Lớp TextInputEditText được cung cấp để được sử dụng như là một phần tử con của bố cục này. Sử dụng TextInputEditText cho phép TextInputLayout kiểm soát tốt hơn các khía cạnh trực quan của bất kỳ kiểu nhập văn bản nào. Một ví dụ sử dụng là như vậy:

     <android.support.design.widget.TextInputLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content">

     <android.support.design.widget.TextInputEditText
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:hint="@string/form_username"/>

 </android.support.design.widget.TextInputLayout>

TextInputLayout TextInputEditText

|
18

Bạn có thể làm điều đó với TextInputLayoutvà các thư viện compat với:

app:counterEnabled="true"
app:counterMaxLength="420"

và hoàn thành:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:counterEnabled="true"
    app:counterMaxLength="420">

    <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:maxLength="420" />

</android.support.design.widget.TextInputLayout>
|
7

trong xml thêm thuộc tính này cho editText

    android:maxLength="80"

trong java thêm người nghe này

  ed_caption.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            tv_counter.setText(80 - s.toString().length() + "/80");

        }
    });
|
6

Rất đơn giản Thực hiện theo các hướng dẫn dưới đây:

==== Thêm chúng vào Nhập khẩu của bạn ===

import android.text.Editable;
import android.text.TextWatcher;

===== Xác định điều này =====

private TextView sms_count;

========== Inside On Tạo =====

sms_count = (TextView) findViewById(R.id.textView2);


final TextWatcher txwatcher = new TextWatcher() {
   public void beforeTextChanged(CharSequence s, int start, int count, int after) {
   }

   public void onTextChanged(CharSequence s, int start, int before, int count) {

      sms_count.setText(String.valueOf(s.length()));
   }

   public void afterTextChanged(Editable s) {
   }
};

sms_message.addTextChangedListener(txwatcher);
|
5
    You can use TextWatcher class to see text has changed and how much number of character remains.Here i have set counter of 140 characters.

    EditText typeMessageToPost;
    TextView number_of_character;
public void onCreate(Bundle savedBundleInstance) {
        super.onCreate(savedBundleInstance);
setContentView(R.layout.post_activity);
typeMessageToPost.addTextChangedListener(mTextEditorWatcher);
}
private final TextWatcher mTextEditorWatcher=new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            number_of_character.setText(String.valueOf(140-s.length()));
        }
    };
|
4

Chỉ cần đặt 2 dòng này trong TextInputLayouttệp XML của bạn:

app:counterEnabled="true"
app:counterMaxLength="200"
|
1

Nếu bạn sử dụng thư viện androidX thay vì thư viện hỗ trợ cũ

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/til_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:counterEnabled="true"
        app:counterMaxLength="50">
    <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/et_title"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
</com.google.android.material.textfield.TextInputLayout>
|
1

Sử dụng android: maxLạng = "140"

Cần làm việc. :)

Mong rằng sẽ giúp

|
1

Tôi đã gặp vấn đề tương tự và tôi đã thử phương pháp của Cameron. Nó hoạt động nhưng có một lỗi nhỏ: Nếu người dùng sử dụng bản sao và dán thì không thể đếm được ký tự. Vì vậy, tôi đề nghị làm sau khi văn bản thay đổi, như dưới đây:

    private final TextWatcher mTextEditorWatcher = new TextWatcher() {
         public void beforeTextChanged(CharSequence s, int start, int count, int after) {

         }

         public void onTextChanged(CharSequence s, int start, int before, int count) {

         }

          public void afterTextChanged(Editable s) {
             //This sets a textview to the current length
             mTextView.setText(String.valueOf(s.length()));
         }
    };
|
0

thử đi

private TextWatcher textWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {
        editText.post(new Runnable() {
            @Override
            public void run() {
                if (length < 100) {
                    if (count > 0 && after <= 0)/*remove emoij*/ {
                        length--;
                    } else if (count > after)/*remove text*/ {
                        length--;
                    } else if (count == 0 && after > 1)/*emoij*/ {
                        ++length;
                    } else if (count == 0 && after == 1)/*Text*/ {
                        ++length;
                    } else if (count > 0 && after > 1) {
                        ++length;
                    }
                    if (s.length() <= 0)
                        length = 0;
                    Log.w("MainActivity", " Length: " + length);
                } else {
                    if (count > 0 && after <= 0)/*remove emoij*/ {
                        length--;
                    } else if (count > after)/*remove text*/ {
                        length--;
                    }
                    Log.w("MainActivity", " Length: " + length);
                }

                if (length == 100) {
                    editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(s.length())});
                } else {
                    editText.setFilters(new InputFilter[]{});
                }
            }
        });
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};

`

|
0

Hãy thử làm một cái gì đó như thế này.

Giải pháp này có thể hiệu quả hơn so với việc nhận CharSequence.length. Mỗi lần bạn chạm vào bàn phím mềm, sự kiện sẽ kích hoạt; do đó, nếu bạn thực hiện một khoảng thời gian, nó sẽ tính CharSequence mỗi lần, việc này có thể chậm lại nếu bạn bắt đầu tham gia vào CharSequnces lớn. Trình nghe sự kiện về thay đổi văn bản giải quyết trước và sau khi đếm. Điều này hoạt động tốt cho các giá trị tăng và giảm

@Override
        public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
            int tick = start + after;
            if(tick < mMessageMax) {
                int remaining = mMessageMax - tick;
                ((TextView)findViewById(R.id.contact_us_chars)).setText(String.valueOf(remaining));
            }
        }
|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.