Android开发EditText输入内容的监听与输入长度的限制+底部带键盘的弹窗

截图:

主要代码:

  private Dialog dialog;
  private View inflate;
dialog = new Dialog(this, R.style.ActionSheetDialogStyle2);
            //填充对话框的布局
            inflate = LayoutInflater.from(this).inflate(R.layout.dialog_edit_username, null);
            //获取控件
            Button btn_cancel = inflate.findViewById(R.id.btn_cancel);
            et_username = inflate.findViewById(R.id.et_username);
            tv_num_text = inflate.findViewById(R.id.tv_num_text);
            /**
             * 获取et_username编辑框的焦点
             */
            et_username.setFocusable(true);
            et_username.setFocusableInTouchMode(true);
            et_username.requestFocus();
            //进入页面显示输入字数
            tv_num_text.setText(et_username.getText().toString().length() + "/10");
            /**
             * et_username输入监听与限制
             */
            et_username.addTextChangedListener(new TextWatcher() {

                private CharSequence temp;
                private int editStart;
                private int editEnd;

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    temp = s;
                }

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

                }

                @Override
                public void afterTextChanged(Editable s) {
                    editStart = et_username.getSelectionStart();
                    editEnd = et_username.getSelectionEnd();
                    tv_num_text.setText(temp.length() + "/10");//输入后字数显示
                    if (temp.length() > 10) {//输入字数限制
                        s.delete(editStart - 1, editEnd);//删除限制外的内容
                        int tempSelection = editStart;
                        et_username.setText(s);//显示限制内的内容
                        et_username.setSelection(tempSelection);//光标焦点设置在行末
                    }
                }
            });

            //获取监听
            btn_cancel.setOnClickListener(this);
            //将布局设置给Dialog
            dialog.setContentView(inflate);
            //获取当前Activity所在的窗体
            Window dialogWindow = dialog.getWindow();
            //设置Dialog从窗体底部弹出
            dialogWindow.setGravity(Gravity.BOTTOM);
            //获得窗体的属性
            WindowManager.LayoutParams lp = dialogWindow.getAttributes();
            lp.y = 0;//设置Dialog距离底部的距离
            //宽度填满
            lp.width = WindowManager.LayoutParams.MATCH_PARENT;
            //将属性设置给窗体
            dialogWindow.setAttributes(lp);
            dialog.show();//显示对话框
ActionSheetDialogStyle2:
 <!-- Dialog弹窗效果显示软键盘-->
    <style name="ActionSheetDialogStyle2" parent="@android:style/Theme.Dialog">
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <!-- 浮于Activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 边框 -->
        <item name="android:windowFrame">@null</item>
        <!-- Dialog以外的区域模糊效果 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- Dialog进入及退出动画 -->
        <item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item>
        <item name="android:windowSoftInputMode">stateAlwaysVisible</item><!--显示软件盘-->
    </style>
dialog_edit_username布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff5f5f5"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:gravity="center"
        android:text="请输入用户名"
        android:textColor="@color/color_text"
        android:textSize="11sp" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:background="@color/white">

        <EditText
            android:id="@+id/et_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:gravity="top"
            android:lines="2"
            android:maxLines="2"
            android:padding="5dp"
            android:text="隔夜说动漫"
            android:textColor="@color/color_text"
            android:textSize="13sp" />

        <TextView
            android:id="@+id/tv_num_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:layout_marginRight="5dp"
            android:layout_marginBottom="5dp"
            android:textSize="10sp" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:gravity="center_vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="支持中文英文、数字"
            android:textSize="10dp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_cancel"
                android:layout_width="50dp"
                android:layout_height="20dp"
                android:background="@drawable/shape_bg_gary"
                android:text="取消"
                android:textSize="10dp" />

            <Button
                android:layout_width="50dp"
                android:layout_height="20dp"
                android:layout_marginLeft="15dp"
                android:background="@drawable/shape_btn_bg_blue"
                android:text="确定"
                android:textColor="@color/white"
                android:textSize="10dp" />
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

按钮背景 shape_bg_gary

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#E9E9E9" />
    <corners android:radius="2dp" />
</shape>

按钮背景shape_btn_bg_blue

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="1dp" />
    <solid android:color="#5D96CB" />
</shape>

猜你喜欢

转载自blog.csdn.net/juer2017/article/details/91540117