Android开发丶自定义带EditText的AlertDialog
接到一个需求,点击某个按钮需要弹出一个带有EditText的AlertDialog弹窗,实现起来并不难,简单记录下方便以后使用。
国际惯例,效果图走起:
下面是实现步骤
1.首先画自定义的布局,我们给里面放了四个TextView、一个EditText。
dialog_choosepage.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="20dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提示" android:textColor="#000" android:textSize="18sp" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginTop="20dp" android:text="请输入数字" android:textSize="16sp" /> <EditText android:id="@+id/choosepage_edittext" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:maxLength="5" android:numeric="integer" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginBottom="20dp" android:layout_marginTop="10dp" android:orientation="horizontal"> <TextView android:id="@+id/choosepage_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="20dp" android:text="取消" android:textColor="@color/colorAccent" android:textSize="16sp" /> <TextView android:id="@+id/choosepage_sure" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确定" android:textColor="@color/colorAccent" android:textSize="16sp" /> </LinearLayout> </LinearLayout>
2.打开MainActivity,设置按钮的点击事件。
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this); View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_choosepage, null); TextView cancel =view.findViewById(R.id.choosepage_cancel); TextView sure =view.findViewById(R.id.choosepage_sure); final EditText edittext =view.findViewById(R.id.choosepage_edittext); final Dialog dialog= builder.create(); dialog.show(); dialog.getWindow().setContentView(view); //使editext可以唤起软键盘 dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "cancel", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); sure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "sure", Toast.LENGTH_SHORT).show(); btn.setText(edittext.getText().toString()+ ""); dialog.dismiss(); } }); } });
最重要的是,自定义布局中的edittext点击默认是无法唤起软键盘的,我们需要加上这么一行
//使editext可以唤起软键盘 dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
至此全部完成,Demo附上!