200是输入文字的限制字数,在输入的过程中做一个监听,每一次输入后数字都是动态变化的,样式如上图。
public class CounterManager { private Activity mContext; private RelativeLayout mRelativeLayout; private EditText mEditText; private TextView mTextView; public CounterManager(Activity context, RelativeLayout relativeLayout, EditText editText, TextView number) { this.mContext = context; this.mRelativeLayout = relativeLayout; this.mEditText = editText; this.mTextView = number; } @SuppressLint("ClickableViewAccessibility") public void textChanged() { mRelativeLayout.setOnClickListener(v -> { mEditText.setCursorVisible(true); InputMethodUtil.show(mContext); }); mEditText.setOnClickListener(v -> mEditText.setCursorVisible(true)); mEditText.setOnTouchListener(new View.OnTouchListener() { // 按住和松开的标识 int flag = 0; @Override public boolean onTouch(View v, MotionEvent event) { flag++; if (flag == 2) { flag = 0; mEditText.setCursorVisible(true); } return false; } }); mEditText.setOnFocusChangeListener((v, hasFocus) -> { if (hasFocus) { } else { mEditText.setCursorVisible(false); if (TextUtils.isEmpty(mEditText.getText().toString().trim())) { mEditText.setText(""); } } }); mEditText.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) { } @SuppressLint("SetTextI18n") @Override public void afterTextChanged(Editable s) { int length = s.length(); mTextView.setText(200 - length + ""); if (length == 100) { if (!TextUtils.isEmpty(mEditText.getText().toString().trim())) { new com.air.basemvp_kotlin.utils.android.SnackbarUtil.SnackbarBuilder(mContext, "字数已经达到上限了~").show(); } } } }); } }这是计数器的类,布局代码如下
<RelativeLayout android:id="@+id/rl_describe" android:layout_width="match_parent" android:layout_height="146dp" android:background="@color/c100" android:orientation="vertical" android:visibility="visible"> <EditText android:gravity="top" android:id="@+id/et_describe" android:layout_width="wrap_content" android:layout_height="100dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginEnd="16dp" android:layout_marginStart="16dp" android:layout_marginTop="12dp" android:background="@null" android:cursorVisible="false" android:hint="请输入文字描述" android:maxLength="100" /> <TextView android:id="@+id/tv_num" android:layout_width="wrap_content" android:layout_height="46dp" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_marginEnd="16dp" android:gravity="center_vertical" android:text="200" /> </RelativeLayout>然后在你的Activity里调用这个类
@BindView(R2.id.et_describe) EditText mEtDescribe; @BindView(R2.id.tv_num) TextView mTvNum; @BindView(R2.id.rl_describe) RelativeLayout mRlDescribe; CounterManager reasonManager = new CounterManager(this, mRlDescribe, mEtDescribe, mTvNum); reasonManager.textChanged();这样就可以实现输入的过程中倒数的功能啦~