Android简单例子——AlertDialog

最近学习了一段时间的Android,在网上找了些小的Demo,自己模拟这做了下,首先谢谢那些提供例子的朋友

今天主要学习的是简单的Dialog的使用(实现退出对话框)和自定义对话框

1.实现退出对话框

普通模式的对话框使用比较简单,主要是设置对话框标题、设置对话框内容、设置对话框中的按钮,以及增加监听事件,主要代码如下

//普通样式的对话框
        btn2 = (Button) findViewById(R.id.btn2);
        btn2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                /**声明一个Builder对象在当前Activity**/
                AlertDialog.Builder  ad = new Builder(MainActivity.this) ;
                /**设置标题**/
                ad.setTitle("退出应用");
                /**设置主题内容**/
                ad.setMessage("是否退出应用?");
                /**设置按钮**/
                ad.setPositiveButton("确认", new DialogInterface.OnClickListener() {
                      /**按钮增加监听时间,关闭activity**/
                      public void onClick(DialogInterface dialog, int which) {
                          MainActivity.this.finish();
                          System.exit(0);
                      } }
                );
                /**设置按钮**/
                ad.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    /**设置取消监听时间,关闭当前dilaog**/
                   public void onClick(DialogInterface dialog, int which) {
                     dialog.dismiss();
                   }
                 });
                ad.create().show();
            }
        });

2.自定义对话框

自定义对话框相对来说使用就复杂了,主要是为自定义的对话框设置样式,在学习这个内容的时候,学会了selector的使用

Android中的Selector主要是用来改变ListView和Button控件的默认背景

例如在这个demo中定义的两个按钮样式

1.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--
        1.android:state_focused:当控件获得焦点的时候
        2.android:state_pressed:当控件按下的时候
        3.android:state_selected:当控件选中的时候

     -->
    <item android:drawable="@drawable/linkbtnbgedim" android:state_pressed="true"/>
    <item android:drawable="@drawable/linkbtnbg"/>

</selector>

2.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/imgcanceled" android:state_pressed="true"/>
    <item android:drawable="@drawable/imgcancel"/>

</selector>

自定义对话框的样式代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- 顶部,使用相对布局,更容易方便才做 -->
    <RelativeLayout
        android:id="@+id/customviewlayTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#1A94F9" >

        <TextView
            android:id="@+id/customviewtvTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:padding="10dp"
            android:text="关于我们"
            android:textColor="#000000" />

        <ImageButton
            android:id="@+id/customviewtvimgCancel"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@drawable/canceltor" />
    </RelativeLayout>

    <!-- 中间内容 -->
    <LinearLayout
        android:id="@+id/customviewlayMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_below="@id/customviewlayTitle"
        android:padding="20dp" >

        <TextView
            android:id="@+id/orthertv0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="作者:maozhanlei"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/orthertv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:linksClickable="true"
            android:text="博客:http://www.cnblogs.com/qadada/"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/orthertv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:linksClickable="true"
            android:text="Email:[email protected]"
            android:textColor="#000000" />
    </LinearLayout>

    <!-- 底部按钮 -->
    <LinearLayout
        android:id="@+id/customviewlayLink"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/customviewlayMessage"
        android:orientation="horizontal"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingBottom="20dp">

        <Button
            android:id="@+id/ortherbtnemil"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@drawable/linkbtnbged"
            android:linksClickable="true"
            android:layout_weight="1"
            android:layout_marginRight="10dp"
            android:text="Email给作者" />

        <Button
            android:id="@+id/ortherbtnweb"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:linksClickable="true"
            android:background="@drawable/linkbtnbged"
            android:text="访问博客"
            android:layout_marginLeft="10dp"
            android:layout_weight="1"/>
    </LinearLayout>
</RelativeLayout>

核心java代码

    /**
     * 点击主界面按钮点监听
     *
     */
    private void onClickBtnListener() {
        Builder builder=myBuilder(MainActivity.this);
        /**调用Build的show方法设置为显示,并返回一个AlertDialog对象**/
        final AlertDialog dialog=builder.show();
        /**点击屏幕外侧对话框是否显示**/
        dialog.setCanceledOnTouchOutside(false);
        /**点击右侧的按钮关闭对话框**/
        imageCloseDialog(dialog);

        sendEmailClickListener(dialog);

        openBlogListener(dialog);
    }

    /**
     * 访问blog的监听事件
     * @param dialog
     */
    private void openBlogListener(final AlertDialog dialog) {
        Button ortherbtnweb = (Button)customView.findViewById(R.id.ortherbtnweb);
        ortherbtnweb.setOnClickListener(new OnClickListener() {

            /* 点击访问博客按钮,访问我的博客网站
             * @see android.view.View.OnClickListener#onClick(android.view.View)
             */
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Uri uri = Uri.parse("http://blog.csdn.net/asinzuo");
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
                dialog.dismiss();
            }
        });
    }

    /**
     * 发送邮件按钮事件
     * @param dialog
     */
    private void sendEmailClickListener(final AlertDialog dialog) {
        Button ortherbtnemil = (Button) customView.findViewById(R.id.ortherbtnemil);
        ortherbtnemil.setOnClickListener(new OnClickListener() {

            /* 启动发送邮件的服务
             * @see android.view.View.OnClickListener#onClick(android.view.View)
             */
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent i = new Intent(Intent.ACTION_SEND);
                i.setType("text/plain");
                i.setType("message/rfc822") ; // 真机上使用这行
                i.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
                i.putExtra(Intent.EXTRA_SUBJECT,"windows风格dialog反馈");
                i.putExtra(Intent.EXTRA_TEXT,"内容");
                startActivity(Intent.createChooser(i, "选择应用"));
                dialog.dismiss();
            }
        });
    }

    /**
     * 点击关闭图片,关闭弹出框
     * @param dialog
     */
    private void imageCloseDialog(final AlertDialog dialog) {
        /**从customView中获得关闭按钮,返回值是一个ImageButton**/
        ImageButton customviewtvimgCancel=(ImageButton)customView.findViewById(R.id.customviewtvimgCancel);
        /**为ImageButton设置监听事件,使用匿名内部类实现**/
        customviewtvimgCancel.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                /**调用AlertDiloag的dismiss方法,进行关闭**/
                dialog.dismiss();
            }
        });
    }

    /**
     * 生成一个Builder对象
     * @param mainActivity
     * @return
     */
    private Builder myBuilder(MainActivity mainActivity) {
        // TODO Auto-generated method stub
        /**
         * 它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;
         * 而findViewById()是找xml布局文件下的具体widget控件
         *
         */

        /**从指定的activity中获得一个LayoutInflater对象**/
        final LayoutInflater inflater=this.getLayoutInflater();
        /**inflate()的作用就是将一个用xml定义的布局文件查找出来,返回值是view类型**/
        customView=inflater.inflate(R.layout.windowsdialog, null);
        /**创建一个Builder对象**/
        AlertDialog.Builder builder=new AlertDialog.Builder(mainActivity);

        return builder.setView(customView);
    }

Demo下载

时间: 2024-10-09 12:00:01

Android简单例子——AlertDialog的相关文章

Android简单例子——IpHone样式AlertDialog

此例子源于网络,下载下来之后,自己加了写注释,作为总结,发到博客中,谢谢原作者 通过这个例子学到的东西 1.自定义对话框的使用 2.程序中使用颜色如何进行存放,增加复用性 3.加深线性布局.常用控件的使用 1.实现效果 2.颜色值文件 <?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="white">#FFFFFF</dra

【转】android json解析及简单例子

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.JSON相对于XML来讲,数据的体积小 4.JSON与JavaScript的交互更加方便

android json解析及简单例子(转载)

android json解析及简单例子 JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.JSON相对于XML来讲,数据的体积小 4.JS

android中的AlertDialog详细概述

android的AlertDialog详解 AlertDialog的构造方法全部是Protected的,所以不能直接通过new一个AlertDialog来创建出一个AlertDialog. 要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法. 使用AlertDialog.Builder创建对话框需要了解以下几个方法: setTitle :为对话框设置标题 setIcon :为对话框设置图标 setMessage:为对话框设置内容 setVie

Android简单的分享笔记

http://blog.csdn.net/xyz_lmn/article/details/16856843 采用Intent隐式调用Activity的方法,主要使用Intent.ACTION_SEND和Intent.createChooser(); 调用Android系统的分享接口.系统会过滤手机上的具有分享应用的程序,让用户进行选择.如果没有使用Intent.createChooser()则会取系统默认的用户分享方式,只有未设置的情况下才会弹出让用户进行选择. 1.简单的分享文本 1 Inte

Android进阶之AlertDialog自定义

AlertDialog的自定义方式有很多种,这里介绍两种. 第一种是比较简单的,只自定义内容. 在AlertDialog使用详解中,非常详细的介绍了以下六种使用方法. 一.简单的AlertDialog(只显示一段简单的信息,比如about us) 二.带按钮的AlertDialog(显示提示信息,让用户操作,比如exit时的警告框) 三.类似ListView的AlertDialog(展示内容,比如某人的一些注册信息) 四.类似RadioButton的AlertDialog(让用户选择,单选) 五

Android简单的文件浏览器,ListActivity的简单用法

2014-07-29 13:39:09MainActivity.java package com.example.sample_4_21; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.AlertDialog; import android.app.ListActivity; import android.content.DialogInterface; imp

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

Hadoop RPC简单例子

jdk中已经提供了一个RPC框架-RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架. 同其他RPC框架一样,Hadoop RPC分为四个部分: (1)序列化层:Clent与Server端通信传递的信息采用了Hadoop里提供的序列化类或自定义的Writable类型: (2)函数调用层:Hadoop RPC通过动态代理以及java反射实现函数调用: (3)网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制: (4)服务器端