截图:
主要代码:
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>