先贴上源码 这个是要弹出的Dialog源码public class CreateUserDialog extends Dialog {
// 上下文对象
Activity context;
// 三个控件
private Button btn_save;
private TextView text_desc;
public EditText text_info;
// 点击事件
private View.OnClickListener mClickListener;
// 构造方法
public CreateUserDialog(Activity context) {
super(context);
this.context = context;
}
public CreateUserDialog(Activity context, int theme, View.OnClickListener clickListener) {
super(context, theme);
this.context = context;
this.mClickListener = clickListener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 指定布局
this.setContentView(R.layout.lay_dialog);
text_desc = findViewById(R.id.text_desc);
text_info = findViewById(R.id.text_info);
// 获取窗口对象
Window dialogWindow = this.getWindow();
WindowManager m = context.getWindowManager();
// 获取屏幕宽、高用
Display d = m.getDefaultDisplay();
// 获取对话框当前的参数值
WindowManager.LayoutParams p = dialogWindow.getAttributes();
// 宽度设置为屏幕的0.8
p.width = (int) (d.getWidth() * 0.8);
dialogWindow.setAttributes(p);
// 根据id在布局中找到控件对象
btn_save = findViewById(R.id.btn_save);
// 为按钮绑定点击事件监听器
btn_save.setOnClickListener(mClickListener) this.setCancelable(true);}点击事件监听 (弹出Dialog框)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mModify = (Button) findViewById(R.id.btn_modify);
mModify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showEditDialog(mModify);
}
});
}public void showEditDialog(View view) {
createUserDialog = new CreateUserDialog(this, R.style.AdInfoDialog, onClickListener);
createUserDialog.show();
}Dialog框内的点击事件监听
CreateUserDialog createUserDialog;
String info;
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_save:
info = createUserDialog.text_info.getText().toString().trim();
break;
}
mPresenter.update(info);
}
};最后是Dialog的XML文件
<TextView
android:id="@+id/text_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_desc"/>
<EditText
android:id="@+id/text_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="top|start"
android:minHeight="145dp"
android:textSize="20sp" />
<Button
android:id="@+id/btn_save"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="保存" />很简单的一个Dialog
画好这个dialog花了一个小时
然后吧dialog中的信息推送到服务器花了一天(MVP设计模式的精髓我还没有得到,所以多花了点时间去理解)
首先说一下这个Dialog的实现
XML文件不必多少,就是3个控件垂直摆放
然后再Class中定义要弹出的Dialog(毕竟dialog不是放三个控件就能实现的)
此处对比第一段代码
很简单,代码段中都有注释,要用的话直接复制也可以
然后接下来是在要调用Dialog的Fragment中复制第二段代码
在onCreate方法中实例一个Dialog
点击事件中调用它的show 方法
这样就可以成功在Fragment 中弹出Dialog了!
接下来就是弹出框中的对象的监听了
Dialog框中的监听要使用Switch Case ,用来分辨到底是哪一个按钮被点击了
我的代码中是点击后将输入框中的文字传入Fragment中
所以先使用一个变量将要传入的文字存储起来
再使用update 方法将信息传入数据库中(本文不赘述)
如果不需要传入数据库则可以使用mDesc.setText()直接将文字传入控件中
本文介绍如何使用Android平台创建自定义Dialog,并实现与Dialog内控件的交互,包括响应点击事件及处理用户输入。

2881

被折叠的 条评论
为什么被折叠?



