Android自定义Dialog弹窗获取Dialog中的控件ID
2016-07-14 19:46
393 查看
今天在开发的过程中,对于自定义的Dialog进行一个研究的探讨,然后终于弄出一些心得,赶紧记录下来。
自定义Dialog的思路,总的来说就是定义一个dialog的xml,然后对这个xml的控件进行封装显示,在到对应的界面点击相应的按钮弹出这个dialog就实现了。具体上图和代码吧。
首先是dialog的xml实现后的效果图,代码实现如下:
实现了dialog的xml还需要对我们dialog的style进行一个设计,在styles.xml中添加我们的dialog的style,下面会用到。
然后,针对我们的xml设计相应的MyDialog.java:
然后在你需要用到弹出dialog的地方添加事件,比如我用到的是点击一个按钮就弹出了这个dialog的窗体。
首先要对dialog进行一个声明:
然后我们还需要在获取资源的部分,对我们自定义的dialog进行对象的实例化,具体如下所示:
这部分,对我们声明的自定义的dialog进行实例化,然后这个MyDialog里面还存在我们dialog中控件的监听部分。在OnClick部分中,就可以对我们的控件来进行一个事件的监听。
而为了获取到相应的控件,我们获取控件的相应的方法:
要获取dialog上面的资源控件,如下:
然后在你需要弹出dialog的地方调用dialog的show方法就可以实现我们的dialog的弹出显示:
还有一些dialog的方法,可能会用到的,这里也简单的说一下我用到的吧:
通过上述的内容,就可以实现我们的自定义的Dialog的显示操作,并且获取到dialog中的控件部分然后进行监听了。希望能够对大家有一定的帮助作用。
自定义Dialog的思路,总的来说就是定义一个dialog的xml,然后对这个xml的控件进行封装显示,在到对应的界面点击相应的按钮弹出这个dialog就实现了。具体上图和代码吧。
首先是dialog的xml实现后的效果图,代码实现如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/help" android:layout_width="325dp" android:layout_height="wrap_content" android:background="@drawable/shape" android:padding="5dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:background="@drawable/shape" android:gravity="center"> <RelativeLayout android:id="@+id/line1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="45dp" android:text="账号问题" android:textColor="#de6654" android:textSize="18sp" /> <Button android:id="@+id/close" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:background="@mipmap/close" /> </RelativeLayout> <EditText android:id="@+id/edit_text" 4000 android:layout_width="270dp" android:layout_height="210dp" android:layout_below="@id/line1" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="@drawable/edit_shape" android:gravity="top" android:hint="输入您的问题" android:textColor="#8e8e8e" android:textColorHint="#8e8e8e" android:textSize="14sp" /> <com.kegoal.view.ClearEditText android:id="@+id/edit_connect" android:layout_width="270dp" android:layout_height="45dp" android:layout_below="@id/edit_text" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="@mipmap/connect" android:hint="联系方式:QQ / 邮箱 / 联系电话" android:numeric="integer" android:paddingLeft="20dp" android:paddingRight="17dp" android:singleLine="true" android:textColor="#8e8e8e" android:textColorHint="#8e8e8e" android:textSize="14sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="45dp" android:layout_below="@id/edit_connect" android:layout_gravity="bottom" android:layout_marginBottom="20dp" android:layout_marginTop="10dp" android:gravity="center" android:orientation="horizontal"> <Button android:id="@+id/btn_connect" android:layout_width="115dp" android:layout_height="45dp" android:background="@mipmap/btn_connet" android:text="电话咨询" android:textColor="#de6654" android:textSize="15sp" /> <Button android:id="@+id/btn_commit" android:layout_width="150dp" android:layout_height="45dp" android:layout_marginLeft="10dp" android:background="@mipmap/btn_commit" android:text="提交" android:textColor="#646464" android:textSize="15sp" /> </LinearLayout> </RelativeLayout> </RelativeLayout>
实现了dialog的xml还需要对我们dialog的style进行一个设计,在styles.xml中添加我们的dialog的style,下面会用到。
<style name="Dialog" parent="android:style/Theme.Dialog"> <item name="android:background">#00000000</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> </style>
然后,针对我们的xml设计相应的MyDialog.java:
import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; /** * Created by Administrator on 2016/7/15 0015. */ public class MyDialog extends Dialog implements View.OnClickListener { private Context context; private EditText text, connect; private Button close, btn_commit, btn_connect; private LeaveMyDialogListener listener; public interface LeaveMyDialogListener { public void onClick(View view); } public MyDialog(Context context) { super(context); this.context = context; } public MyDialog(Context context, int theme, LeaveMyDialogListener listener) { super(context, theme); this.context = context; this.listener = listener; } //onCreate中对dialog的组件进行资源的获取以及监听的添加。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.dialog_layout); close = (Button) findViewById(R.id.close); //关闭的按钮 btn_commit = (Button) findViewById(R.id.btn_commit); //提交按钮的资源 btn_connect = (Button) findViewById(R.id.btn_connect); bcc8 //联系按钮资源获取 text = (EditText) findViewById(R.id.edit_text); connect = (EditText) findViewById(R.id.edit_connect); close.setOnClickListener(this); btn_connect.setOnClickListener(this); btn_commit.setOnClickListener(this); } @Override public void onClick(View v) { listener.onClick(v); } }
然后在你需要用到弹出dialog的地方添加事件,比如我用到的是点击一个按钮就弹出了这个dialog的窗体。
首先要对dialog进行一个声明:
MyDialog dialog;
然后我们还需要在获取资源的部分,对我们自定义的dialog进行对象的实例化,具体如下所示:
这部分,对我们声明的自定义的dialog进行实例化,然后这个MyDialog里面还存在我们dialog中控件的监听部分。在OnClick部分中,就可以对我们的控件来进行一个事件的监听。
dialog = new MyDialog(this, R.style.Dialog, new MyDialog.LeaveMyDialogListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.close: dialog.dismiss(); edit_text.setText(""); edit_connect.setText(""); break;
而为了获取到相应的控件,我们获取控件的相应的方法:
要获取dialog上面的资源控件,如下:
edit_text = (EditText) dialog.findViewById(R.id.edit_text);
然后在你需要弹出dialog的地方调用dialog的show方法就可以实现我们的dialog的弹出显示:
dialog.show();
还有一些dialog的方法,可能会用到的,这里也简单的说一下我用到的吧:
dialog.setCancelable(false); //dialog点击空白地方不可取消,也可以设置成true,则是点击dialog外部可以取消
dialog.dismiss(); //取消dialog,但是dialog中已经输入的信息,你关闭后进到这个dialog还有显示
通过上述的内容,就可以实现我们的自定义的Dialog的显示操作,并且获取到dialog中的控件部分然后进行监听了。希望能够对大家有一定的帮助作用。
相关文章推荐
- android自定义dialog中点击listview的item事件关闭dialog
- 自定义dialog样式
- 安卓自定义Dialog(四)
- 安卓自定义Dialog(三)
- 安卓自定义Dialog(一)
- Animation从左边开始缩放
- 使用Android Studio导入源码
- Android Studio入门到精通
- Android逆向分析(2) APK的打包与安装
- Android Studio 对GitHub开源项目的引用及导入
- Android相机,YV12ToRGB24,rgbToBitmap
- android studio for android learning (十五) Camera2界面定制与保存到外部存储
- Android Studio 开发环境的搭建与安装
- Android中数据解析的实现
- Android开发学习笔记(二)——编译和运行原理(1)
- android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:
- CardView
- android 蓝牙4.0 分包传输数据 问题
- Android studio 加载so库异常问题
- Android中常用的设计模式<一>