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

2.5对话框控件

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

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所示的应用效果

Android界面编程——对话框控件(四)_第1张图片

2.5-1

Android界面编程——对话框控件(四)_第2张图片
Android界面编程——对话框控件(四)_第3张图片



2.5.2 AlertDialog

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

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

Android界面编程——对话框控件(四)_第4张图片

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


Android界面编程——对话框控件(四)_第5张图片


Android界面编程——对话框控件(四)_第6张图片

Android界面编程——对话框控件(四)_第7张图片


Android界面编程——对话框控件(四)_第8张图片

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、实现在控件的正下方弹出菜单

Android界面编程——对话框控件(四)_第9张图片
Android界面编程——对话框控件(四)_第10张图片

Android界面编程——对话框控件(四)_第11张图片
Android界面编程——对话框控件(四)_第12张图片
Android界面编程——对话框控件(四)_第13张图片

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

Android界面编程——对话框控件(四)_第14张图片

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


更多相关文章

  1. Android开发技巧:动态创建UI界面
  2. 解决Android的ListView控件滚动时背景变黑,让其透明
  3. Android webview加载html页面根据点击确定选中的控件
  4. Android Map Api 使用和开发(1) 添加地图和界面

随机推荐

  1. android:gravity和android:layout_Gravit
  2. android 布局下划线
  3. Android(安卓)Platform各种开发资源
  4. Android系统自带样式(@android:style/)
  5. Android2.2 自带主题themes.xml的源代码
  6. Android中倒计时代码
  7. android 中android:id="@android:id/list
  8. html5 开发 android 注意点
  9. android 计算器简单加法实现
  10. Android(安卓)Application