使用dialog除了可以用AlertDialog.Builder方法直接生成,也可以使用DialogFragment的形式来创建。
第一种方式:
第一种方式有两种写法,当dialog对话框中含有edittext等可输入控件时,需要把builder.create().show()方法写在setView()方法之后,要不然会出现手机上键盘显示不出来的问题。
例如下面这种代码实现的对话框,当点击输入的edittext时,手机上键盘显示不出来,如下:
private void weightClick(float bodyWeight) { final AlertDialog alertDialog = new AlertDialog.Builder(SettingActivity.this, R.style.my_dialog).create(); alertDialog.show(); if (alertDialog.getWindow() == null) { return; } alertDialog.getWindow().setContentView(R.layout.view_dialog_input); TextView msg = (TextView) alertDialog.findViewById(R.id.tv_msg); Button cancel = (Button) alertDialog.findViewById(R.id.btn_cancle); Button sure = (Button) alertDialog.findViewById(R.id.btn_sure); final EditText input = (EditText) alertDialog.findViewById(R.id.input); if (msg == null || cancel == null || sure == null || input == null) { return; } msg.setText("设置体重"); input.setText(String.valueOf(bodyWeight)); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { alertDialog.dismiss(); } }); sure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String val = input.getText().toString(); if (!TextUtils.isEmpty(val) && val.length() > 0) { float bodyWeight = Float.parseFloat(val); setting.setBodyWeight(bodyWeight); if (adapter != null) { adapter.notifyDataSetChanged(); } } else { Utils.makeToast(SettingActivity.this, "请输入正确的参数!"); } alertDialog.dismiss(); } }); }
其中的style.my_dialog的内容为:
<style name="my_dialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowNoTitle">true</item> </style>
R.layout.view_dialog_iput的内容为:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"