• 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="@drawable/ic_head_default" />
    
                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="7.5"
                    android:orientation="vertical" >
    
                    <RelativeLayout
                        android:layout_width="fill_parent"
                        android:layout_height="0dp"
                        android:layout_weight="1" >
    
                        <TextView
                            android:id="@+id/anyfish_dialog_tv_hint"
                            android:layout_width="fill_parent"
                            android:layout_height="fill_parent"
                            android:layout_alignParentLeft="true"
                            android:gravity="bottom|left"
                            android:paddingLeft="15dp"
                            android:text="对话框名称"
                            android:textColor="#ffffff" />
                    </RelativeLayout>
    
                    <TextView
                        android:id="@+id/basedl_tv_hint02"
                        android:layout_width="fill_parent"
                        android:layout_height="0dp"
                        android:layout_weight="1"
                        android:gravity="center_vertical|left"
                        android:paddingLeft="15dp"
                        android:text="对话框凝视。解释这个对话框作用"
                        android:textColor="#ffffff"
                        android:textSize="@dimen/dialog_fistype_exp_textsize" />
                </LinearLayout>
            </LinearLayout>
    
            <EditText
                android:id="@+id/anyfish_dialog_et_input"
                android:layout_width="match_parent"
                android:layout_height="80dp"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="@dimen/dialog_hint_margintop"
                android:background="@drawable/fw_dl_input_et_nor"
                android:ems="10"
                android:gravity="top|left"
                android:hint="请填写内容"
                android:minHeight="50dp"
                android:padding="8dp"
                android:textColor="#bdbedf"
                android:textSize="@dimen/dialog_hint_textsize" />
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/dialog_btn_hight"
                android:layout_marginBottom="14dp"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="@dimen/dialog_hint_margintop"
                android:gravity="center"
                android:minHeight="50dp"
                android:orientation="horizontal" >
    
                <Button
                    android:id="@+id/btn_ok"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_marginRight="20dp"
                    android:layout_weight="1"
                    android:background="@drawable/basedl_bt_ok"
                    android:text="确定"
                    android:textColor="@color/main_textcolor"
                    android:textSize="@dimen/dialog_confirmbtn_textsize" />
    
                <Button
                    android:id="@+id/btn_cancel"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/basedl_bt_cancle"
                    android:text="取消"
                    android:textColor="@color/main_textcolor"
                    android:textSize="@dimen/dialog_confirmbtn_textsize" />
            </LinearLayout>
        </LinearLayout>
    
    </LinearLayout>

    父界面代码:
    <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;
    	}
    
    }

    源代码下载地址:资源下载

  • 相关阅读:
    jquery 操作大全
    http获取图片信息
    微信公众号服务号与订阅号有什么区别?
    国际语言代码 Language Code
    vs 2012 未能找到与约束contractName Microsoft.VisualStudio.Utilities...匹配的导出
    SQL Server 获取满足条件的每个条件下的前N条数据
    使用uploadify上传图片时返回“Cannot read property 'queueData' of undefined”
    Visual Studio 2017 添加引用报错(未能正确加载ReferenceManagerPackage包)
    html之select标签
    jQuery中Ajax的属性设置
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5102082.html
Copyright © 2020-2023  润新知