Android界面编程——对话框控件(四)

Android界面编程——对话框控件

2.5对话框控件

对话框是提示用户作出决定或输入额外信息的小窗口。对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件。Android中常见跟对话框相关控件有Toast、AlertDialog、PopupWindow、ProgressDialog等

2.5.1 Toast

Toast用于弹出一个简单文本信息为应用提供反馈,可以和当前活动保持可见和互动,在一定时间后自动消失。Toast有两种形式基本Toast和自定义Toast,效果如图2.5.1-1所示:

图2.5.1-1

1、基本Toast的实现

首先通过makeText()实例化一个Toast,然后调用show()进行显示,代码实现:

Toast toast = Toast.makeText(context, “请检查网络连接”,

Toast.LENGTH_SHORT.);

toast.show();

2、自定义Toast

如果一个简单的文本信息是不够的,可以为Toast自定义布局并可以设置在屏幕上的显示位置。

? 要创建一个自定义布局,定义视图的布局

? 通过setView()方法加载布局。

下面就通过案例2.5-1,实现如图2.5-1所示的应用效果

图2.5-1

2.5.2  AlertDialog

AlertDialog是Dialog的子类,可实现简单、方便、灵活的构建对话框。AlertDialog可显示标题、最多三个按钮、可选择项列表或自定义布局。AlertDialog

主要有三个布局区域如图2.5-2所示:

 图2.5-2

AlertDialog实现要点

实现向AlertDialog添加按钮

通过调用 setPositiveButton() 和 setNegativeButton() 方法实现为对话框添加按钮,代码如下:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

builder.setPositiveButton(“ok”, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

}

});

builder.setNegativeButton(“cancel”, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

}});

 

创建自定义布局

想让对话框具有自定义布局,需创建一个布局,然后通过调AlertDialog.Builder对象上的
setView()将其添加到
AlertDialog,代码如下:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

LayoutInflater inflater = getActivity().getLayoutInflater();

builder.setView(inflater.inflate(R.layout.dialog_signin, null));

默认情况下,自定义布局会填充对话框窗口,但仍然可以使用
AlertDialog.Builder 方法来添加按钮和标题。

下面就通过案例2.5-2,实现如图2.5-3  所示的应用效果

图2.5-3

2.5.3  PopupWindow

PopupWindow是可在任意位置弹出的对话框,在当前活动的Activity的顶部显示一个浮动的容器。AlertDialog与PopupWindow的区别:

? AlertDialog的位置固定,而PopupWindow的位置可以随意。

? AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的。

PopupWindow的实现:

构建PopupWindow

View view= LayoutInflater.from(this).inflate(

R.layout.popuwindow_layout,null);

mPopupWindow=new PopupWindow(view);

设置PopupWindow

1、单击外侧区域关闭PopupWindow

显示PopupWindow之后在外面点击是关闭窗口需进行下列设置,否则点击外面并不会关闭PopupWindow。

mPopupWindow.setFocusable(true);

ColorDrawable colorDrawable=new ColorDrawable(0);

mPopupWindow.setBackgroundDrawable(colorDrawable);

2、为popupwindow添加动画

首先在anim中定义动画资源,并在Style中定义样式然后使用setAnimationStyle()方法为PopupWindow添加动画,代码如下:

进入动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">

<alpha

android:fromAlpha="0"

android:toAlpha="1"

android:duration="1000"

/>

</set>

退出动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">

<alpha android:duration="1000"

android:fromAlpha="1" android:toAlpha="0"/>

</set>

定义样式:

<style name="popuAnimationStyle">

<item name="android:windowEnterAnimation">@anim/popup_enter

</item>

<item name="android:windowExitAnimation">@anim/popup_out</item>

</style>

设置动画

mPopupWindow.setAnimationStyle(R.style.popuAnimationStyle);

弹出PopupWindow

showAsDropDown(view):相对某个控件的位置(正左下方),无偏移

showAsDropDown(view, xoff,  yoff):相对某个控件的位置,有偏移

showAsDropDown(view, xoff, yoff, gravity):相对某个控件的指定位置,有偏移

showAtLocation(parent, gravity, x, y):相对于父控件的指定位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移

下面就通过案例2.5-3,讲解PopupWindow的用法

1、实现在控件的正下方弹出菜单

2.5.3 ProgressDialog

带有进度条(Progressbar)的对话框,该对话框只能显示一个文本或一个View加上一个进度条,但文本和View不能同时使用。如果显示不确定的进度(圆形进度条),则不建议使用ProgressDialog,而应改为在Activity布局中使用

ProgressDialog的几个方法

1.setMax()

设置对话框中进度条的最大值, 进度的取值范围为0..10000。

2.setTile()

设置标题。

3.setProgressStyle()

设置对话框中进度条的样式。例如:环形和水平。

参数:

ProgressDialog.STYLE_SPINNER 环形精度条。

ProgressDialog.STYLE_HORIZONTAL 水平样式的进度条。

4.setMessage()

设置显示的内容。

下面就通过案例2.5-4,讲解ProgressDialog的用法,执行效果如图2.5-4

图2.5-4

提示:本例中用于异步任务,请参阅AsyncTask的用法请参阅《第三章 事件处理》异步任务相关内容

public class ProgressDialogActivity extends AppCompatActivity {
    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progress_dialog);
        showProgressDialog();
        new UpdateAsyncTask().execute();
    }
    private void showProgressDialog(){
        //创建ProgressDialog
        progressDialog = new ProgressDialog(ProgressDialogActivity.this);
        //设置ProgressDialog的样式
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        //设置标题
        progressDialog.setTitle("软件更新");
        //设置显示的内容
        progressDialog.setMessage("正在下载");
        //设置最大值
        progressDialog.setMax(100);
        //设置进度值
        progressDialog.setProgress(0);
        //显示对话框
        progressDialog.show();
    }
    private Integer progress=0;
    private class UpdateAsyncTask extends  AsyncTask<Void,Integer,Void>{
        @Override
        protected Void doInBackground(Void... params) {
            //模拟网络操作。
           while(progress<100){
                try {
                    Thread.sleep(1000);
                    progress+=10;
                    publishProgress(progress);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
        }
            return null;
        }
        @Override
        protected void onPostExecute(Void aVoid) {
            //执行完成之后,关闭对话框。
            progressDialog.dismiss();
        }
        @Override
        protected void onProgressUpdate(Integer... values) {
            Log.d("jereh","dfdfdf");
            super.onProgressUpdate(values);
            //更改进度条的值
            progressDialog.setProgress(values[0]);
        }
    }

代码参考:

codes\ch02\2.5\CustomDialog\app\src\main\java\com\jerehedu\ProgressDialogActivity.java

作者:冲天之峰   20160709

时间: 2024-10-26 03:06:21

Android界面编程——对话框控件(四)的相关文章

Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种

http://blog.csdn.net/yanzi1225627/article/details/8633872 第二种方法也要新建一个图片+文字的xml布局文件,然后写一个类继承自LinearLayout.在主程序里实例化并设置相应参数.这种方式也是我最推荐的一种. 第一部分:myimgbtn_layout.xml [html] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> &

Android界面编程——Android基本控件

 Android界面编程 Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户. 作为一个程序员如何才能开发出友好的图形界面呢.实际上Android提供了非常丰富UI(User Interface)控件,开发者只要掌握了这些控件的特性,按照一定的规律,就可以像堆积木一样开发出友好的图形界面. 本章内容将介绍常用控件的具体用法. 2.1  Android UI的基础知识 Android中所有的

Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件

这个例子是比较有用的,基本上可以说,写完这一次,以后很多情况下,直接拿过来addView一下,然后再addInterceptorView一下,就可以轻轻松松的达到组合界面中特定控件来响应特定方向的触摸事件了. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45198549,非允许请勿用于商业或盈利用途,违者必究. 在写Android应用的过程之中,经常会遇到这样的情况:界面包含了多个控件,我们希望触摸在界面上的不

android 33 对话框控件

对话框控件:最多3个按钮. mainActivity.java package com.sxt.day05_09; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.util.Log; import android.view.View; import android

Android常用酷炫控件(开源项目)github地址汇总

转载一个很牛逼的控件收集贴... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style 等等. 一.ListView android-pulltorefresh一个强大的拉动

Android界面编程——导航栏及菜单(六)

Android界面编程--导航栏及菜单 2.7导航栏及菜单 2.7.1  ActionBar ActionBar是Android3.0(API 11)开始增加的新特性,ActionBar出现在活动窗口的顶部,可以显示标题.icon.Actions按钮.可交互View,可实现应用程序级的导航,如图2.7-1所示 图2.7-1 其中 1. App icon: 主要用于展示App的Logo,如果当前界面不是一级界面,还可以展示返回航. 2.View Control: 用于切换不同的视图或者展示非交互信

Android UI布局与控件(二)

一.View类的常用xml属性:[了解] ①.Android中所有的UI(用户界面)元素都是使用View和ViewGroup对象建立的 ②.View是一个可以将一些信息绘制在屏幕上并与用户产生交互的对象 ③.ViewGroup是一个包含多个的View和ViewGroup的容器,用来定义UI布局. ④.Android提供了一系列的View和ViewGroup的子类,开发者可以灵活地组合使用它们来完成界面布 局.界 面元素绘制和用户交互等工作 ⑤.开发者还可以选择性地继承一些系统提供的View,来自

Android UI-自定义日历控件

Android UI-自定义日历控件 本篇博客笔者给大家分享一个日历控件,这里有个需求:要求显示当前月的日期,左右可以切换月份来查看日期. 我们想一想会如何去实现这样的一个控件,有开源的,但可能不太满足我们的特定的需求,这里笔者自定义了一个,读者可以根据自己的需求来修改代码.下面来说一下实现的思路: 首先我们要显示当前月份,自然我们要计算出当前的日期,并且把每一天对应到具体的星期,我们会有以下效果: 我们先想一下这样的效果用什么控件可以实现?很自然可以想到用网格视图GridView,但这里笔者使

Android中通过WebView控件实现与JavaScript方法相互调用的地图应用

在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用android方法,在这里我个人觉得有点和DWR相似. 为了让大家容易理解,我写了一个简单的Demo,具体步骤如下: 第一步:新建一个Android工程,命名为WebViewDemo(这里我在assets里定义了一个html页面). 第二步:修改main.xml布局文件,增加了一个WebView控件还有But