android(5) 等待窗口

一.等待窗口实现:

记录一下,有时候我们下载数据的时候为了提高用户的体验,加一个等待窗口还是有必要的,有两种等待窗口:

第一种旋转的ProgressBar:

主界面:

public class MainActivity extends Activity {

	private Button button1;
	private TextView textview1;

	public AlertDialog selfdialog;

	private MainActivity main;

	public Handler mhandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			//显示TextView
			case 1:
				Toast.makeText(main, "成功", Toast.LENGTH_SHORT).show();
				textview1.setVisibility(View.VISIBLE);
				break;
			}
			super.handleMessage(msg);
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		main = this;

		button1 = (Button) findViewById(R.id.button1);
		textview1 = (TextView) findViewById(R.id.textview1);

		button1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				showDialogLoading();
			}
		});
	}
    //等待dialog
	private void showDialogLoading() {
		LayoutInflater inflater = (LayoutInflater) this
				.getSystemService(this.LAYOUT_INFLATER_SERVICE);
		//view
		View view = inflater.inflate(R.layout.footer, null);
		AlertDialog.Builder ad = new AlertDialog.Builder(this);
		selfdialog = ad.create();
		selfdialog.setView(view);
		//屏蔽掉点击
		selfdialog.setCancelable(false);
		selfdialog.show();
		new Thread() {
			@Override
			public void run() {
				try {
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				Message message = new Message();
				message.what = 1;
				main.mhandler.sendMessage(message);
				//关闭dialog
				selfdialog.dismiss();
			}
		}.start();
	}
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center" >
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击我"
        />
    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="加载完成后显示我"
        android:visibility="gone"
        />
</LinearLayout>

footer.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center" >
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击我"
        />
    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="加载完成后显示我"
        android:visibility="gone"
        />
</LinearLayout>

这样第一种的等待窗就实现了。

第二种进度条式的等待窗:

主界面:

public class MainActivity extends Activity {

	private Button button1;
	private TextView textview1;
	private TextView textview2;
	public AlertDialog selfdialog;

	private MainActivity main;

	public Handler mhandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			//显示TextView
			case 1:
				textview2.setText("正在下载("+msg.obj.toString()+"/10)");
				break;
			}
			super.handleMessage(msg);
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		main = this;

		button1 = (Button) findViewById(R.id.button1);
		textview1 = (TextView) findViewById(R.id.textview1);

		button1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				showDialogLoading();
			}
		});
	}
    //等待dialog
	private void showDialogLoading() {
		LayoutInflater inflater = (LayoutInflater) this
				.getSystemService(this.LAYOUT_INFLATER_SERVICE);
		//view
		View view = inflater.inflate(R.layout.footer, null);
		final ProgressBar progressbar1 = (ProgressBar)view.findViewById(R.id.progressbar1);
		textview2 = (TextView)view.findViewById(R.id.textview2);
		AlertDialog.Builder ad = new AlertDialog.Builder(this);
		selfdialog = ad.create();
		selfdialog.setView(view);
		//屏蔽掉点击
		selfdialog.setCancelable(false);
		selfdialog.show();
		new Thread() {
			@Override
			public void run() {
				//getProgress()获得当前的进度值
				//incrementProgressBy()每次增加的量
				//getMax()获得这个进度条的范围的上限
				int max = progressbar1.getMax();
				int i = 0;

				while(true){

					if(i > max){
						break;
					}
					try {
						Thread.sleep(1000);
						progressbar1.incrementProgressBy(1);
						Message message = new Message();
						message.what = 1;
						message.obj = progressbar1.getProgress();
						main.mhandler.sendMessage(message);
						i++;
					} catch (InterruptedException e) {
						e.printStackTrace();
					}

				}
				//关闭dialog
				selfdialog.dismiss();
			}
		}.start();
	}
}

footer.xml:

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

    <ProgressBar
        android:id="@+id/progressbar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:max="10"
        />

    <TextView
        android:id="@+id/textview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="正在下载(0/10)"
        android:textColor="@android:color/black"
        android:textSize="9sp" />

</LinearLayout>

activity_main与上个例子布局一样。

时间: 2024-11-08 23:26:26

android(5) 等待窗口的相关文章

Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析

在前两文中,我们分析了Activity组件的窗口对象和视图对象的创建过程.Activity组件在其窗口对象和视图对象创建完成之后,就会请求与WindowManagerService建立一个连接,即请求WindowManagerService为其增加一个WindowState对象,用来描述它的窗口状态.在本文中,我们就详细分析Activity组件与WindowManagerService的连接过程. 我们从两方面来看Activity组件与WindowManagerService服务之间的连接.一方

Android应用程序窗口(Activity)的视图对象(View)的创建过程分析

从前文可知道,每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口.每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图.应用程序窗口视图是真正用来实现UI内容和布局的,也就是说,每一个Activity组件的UI内容和布局都是通过与其所关联的一个Window对象的内部的一个View对象来实现的.在本文中,我们就详细分析应用程序窗口视图的创建过程. 在前面Android应用程序窗口(Activity)实现框架简要介绍和学习计划一文中提到,应用程序

Android应用程序窗口(Activity)的测量(Measure)、布局(Layout)和绘制(Draw)过程分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8372924 在前面一篇文章中,我们分析了Android应用程序窗口的绘图表面的创建过程.Android应用程序窗口的绘图表面在创建完成之后,我们就可以从上到下地绘制它里面的各个视图了,即各个UI元素了.不过在绘制这些UI元素之前,我们还需要从上到下地测量它们实际所需要的大小,以及对它们的位置进行合适的安排,即对它们进行合适的布局.在本文中,我们

Android应用程序窗口(Activity)的绘图表面(Surface)的创建过程分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8303098 在前文中,我们分析了应用程序窗口连接到WindowManagerService服务的过程.在这个过程中,WindowManagerService服务会为应用程序窗口创建过一个到SurfaceFlinger服务的连接.有了这个连接之后,WindowManagerService服务就可以为应用程序窗口创建绘图表面了,以便可以用来渲染窗口

Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析

http://blog.csdn.net/luoshengyang/article/details/8223770 在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程.由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口.由此又可知,Activity只不过是一个高度抽象的UI组件,它的具体UI实现其实是由其它的一系列对象来实现的.在本文中,我们就将详细分析Android应用程序窗口

Android实例-多窗口的切换

Android实例-多窗口的切换 1.图片一是程序运行后的界面. 2.图片二是点击"非模态显示"的界面. 3.图片三是点击"模诚显示"的界面(提示平台不支持). unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphic

Android应用程序窗口View的measure过程

Android应用程序的界面是View组成的,这些View以树形结构组织,它们存在着父子关系,其中,子view位于父view里面,因此,在绘制一个Android应用程序窗口的View之前,我们首先要确定它里面的各个子view在父view里面的大小以及位置.确定各个子view在父view里面的大小以及位置的过程又称为测量过程和布局过程.测量和布局完后,就可以绘制view了. 参考上一篇文章Android应用程序窗口View的创建过程,可以知道Android应用程序窗口的根View是DecorVie

Android 实现顶层窗口、悬浮窗口

1.如图片1所示,在一个Android应用中,除了标题栏和底层的ActionBar的区域,是我们可以操纵的UI区域,那是不是说我们就不能改变除了这两个区域的UI呢?答案是否定的. 比如现在我们希望把一个View放在窗口的最低端显示,通过hierarchyviewer工具我们可以发现最底层的ActionBar是在TestActivity布局的父窗口中设置的,那么我们想通过setContentView(R.layout.activity_main)在activity_main布局文件中设置就无法实现

Qt 使用QMovie加载gif图片实现动态等待窗口

有时候要进行某项后台处理,但后台处理时间很长,需要提示用户等待,不妨做一个动态等待窗口.具体实现过程如下: 1 自定义窗口类DlgWait (1) 在资源中添加动态的gif图片,记住它的大小. 我添加的是一个“loading.gif”图片,大小是100x100,如下: (2)添加一个窗口界面类DlgWait 窗口大小比gif稍大即可,如150x150 在界面上添加2个QLabel: 第一个用来显示gif,名为lbl_gif,text为空,大小为100x100 第二个在下,用来显示提示信息,名为l