首页 > 代码库 > Android中Dialog的使用
Android中Dialog的使用
上一篇博文讲到对话框popWindow的使用,这篇博文主要讲解Dialog的使用。
1、什么是Dialog?
Dialog就是对话框的一种方式!在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择,这种对话框叫Dialog。最经常使用的,大家也比较熟悉的,也使用比较频繁有AlertDialog,这边篇博文将比较详尽的讲解Dialog的使用。
2、Dialog的特性
Android的对话框有两种:PopupWindow和Dialog。它们的不同点在于:
Dialog的位置固定,而PopupWindow的位置可以随意。
Dialog是非阻塞线程的,而PopupWindow是阻塞线程的。
以上两点是PopupWindow和Dialog最大的不同。
3、AlertDialog的使用
通过查看这句代码AlertDialog定义的源码
public class android.app.AlertDialog extends android.app.Dialog implements android.content.DialogInterface我们可以发现AlertDialog是继承于Dialog的,然而AlertDialog有几种用法呢,经过整理AlertDialog经常使用的有7种,具体请查看我的博文:
7种形式的Android AlertDialog使用举例
4、Diglog的重写
当AlertDialog不能满足我们的需求时,我们应该怎么做,因为AlertDialog是继承于Dialog的,那我们是不是也自己重写一个Dialog呢,这个是可以的
以下一个重写Dialog的小示例:
重写Dialog的界面:
XMl界面代码为:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#60000000" android:gravity="center" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:background="@drawable/basedl_bg" android:focusable="true" android:focusableInTouchMode="true" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="@dimen/dialog_face_hight" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="20dp" android:background="@drawable/fw_dialog_signtype_blue" android:orientation="horizontal" > <ImageView android:id="@+id/basedl_iv_head" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="2.5" android:padding="5dp" android:src=http://www.mamicode.com/"@drawable/ic_head_default" />>
父界面代码:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:gravity="center" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/btn_dialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="对话框弹出" /> <TextView android:id="@+id/tv_dialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/btn_dialog" android:text="输入内容" android:textSize="20sp" /> </RelativeLayout>重写Dialog代码:package com.example.myalertdialog; import android.app.Dialog; import android.content.Context; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MyAlertDialog extends Dialog { private EditText intputEt; private Button sumitBtn; private Button cancelBtn; private Context context; public MyAlertDialog(Context context) { super(context, R.style.BaseDialogStyle); this.context = context; initDialog(); } protected void initDialog() { setContentView(R.layout.my_dl_type_et); intputEt = (EditText) findViewById(R.id.anyfish_dialog_et_input); sumitBtn = (Button) findViewById(R.id.btn_ok); cancelBtn = (Button) findViewById(R.id.btn_cancel); cancelBtn.setOnClickListener(new android.view.View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); } /** * 打开弹窗 */ public void onStartDiglog() { show(); } /** * 关闭弹窗 */ public void onCloseDiglog(){ dismiss(); } /** * @return 返回输入值 */ public String getInputValue() { if (intputEt != null) { return String.valueOf(intputEt.getText()).trim(); } else { return ""; } } /** * @param inputValue * 设置输入的值 */ public void setInputValue(String inputValue) { if (intputEt != null && inputValue != null) { intputEt.setText(inputValue); } } /** * @param onClickListener * 设置的确认键监听事件 */ public void setSumitListener( android.view.View.OnClickListener onClickListener) { if (sumitBtn != null && onClickListener != null) { sumitBtn.setOnClickListener(onClickListener); } } }ps:R.style.BaseDialogStyle为弹出框显示的效果
父activity代码:package com.example.myalertdialog; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private Button dialogBtn; private MyAlertDialog myAlertDialog; private TextView dialogTv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViews(); initListener(); } private void findViews(){ dialogBtn=(Button) findViewById(R.id.btn_dialog); dialogTv=(TextView) findViewById(R.id.tv_dialog); myAlertDialog=new MyAlertDialog(this); } private void initListener(){ myAlertDialog.setSumitListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialogTv.setText(myAlertDialog.getInputValue()); myAlertDialog.onCloseDiglog(); } }); dialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub myAlertDialog.onStartDiglog(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
源码下载地址:资源下载
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。