Android AndroidProgressLayout:加载页面遮挡耗时操作任务页面



Android AndroidProgressLayout:加载页面遮挡耗时操作任务页面

在Android的开发中,往往有这种需求,比如一个耗时的操作,联网获取网络图片、内容,数据库耗时读写等等,在此耗时操作过程中,开发者也许不希望用户再进行其他操作(其他操作可能会引起逻辑混乱),而此时需要给用户一个额外的加载页面遮挡住主逻辑代码的运行,待主页面的耗时操作完成后,自动消失这样加载过度页面,恢复出正常应该显示的页面。
举个实际的例子,如代码使用Android WebView打开一个网页链接试图加载某个网站,但网络质量不佳,需要耗时很久,那么在这个过程中,较好的用户体验做法是:给用户一个加载进度页面,遮挡住WebView。当加载的内容成功后在完全切换回正常的逻辑页面。
Android AndroidProgressLayout实现了这样的功能,Android AndroidProgressLayout在github上的项目主页是:https://github.com/antonkrasov/AndroidProgressLayout
AndroidProgressLayout要实现的功能如图:


现在给出一个例子加以说明。

使用AndroidProgressLayout,需要先写一个布局:

<com.github.androidprogresslayout.ProgressLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:progressLayout="http://schemas.android.com/apk/res-auto"
    android:id="@+id/progress_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    progressLayout:progressBackground="#4fc3f7" >

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

</com.github.androidprogresslayout.ProgressLayout>


Java代码:

package zhangphil.demo;

import com.github.androidprogresslayout.ProgressLayout;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;


public class MainActivity extends Activity {

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

		final ProgressLayout progressLayout = (ProgressLayout) findViewById(R.id.progress_layout);
		
		final TextView text = (TextView) findViewById(R.id.text);

		Handler handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				text.setText("加载完毕!");

				// 切换回正常显示页面
				progressLayout.showContent();
			}
		};
		
		// 开始加载... 假设从这里开始一个耗时的操作将开始启动,在此启动过程中,开发者希望用户稍事休息,等待。。。
		progressLayout.showProgress();

		// 假设有一个耗时的加载业务逻辑,需要5秒完成。
		handler.sendEmptyMessageDelayed(0, 5000);
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可根据加载情况显示提示信息的载入视图,如,加载失败后提示"加载失败"、"网络连接失败"等等。用一个控件就可以管理整个的加载过程。确实方便了。项目地址:https://github.com/antonkrasov/AndroidProgressLayout 效果图:如何使用将<com.github.androidprogresslayout.ProgressLayout> 作为整个布局的根:<com.github.androidprogresslayout.ProgressLayout         xmlns:android="http://schemas.android.com/apk/res/android"         xmlns:app="http://schemas.android.com/apk/res-auto"         android:id="@ id/progress_layout"         android:layout_width="match_parent"         android:layout_height="match_parent"               >     ...你的页面 </com.github.androidprogresslayout.ProgressLayout>2. 得到ProgressLayoutProgressLayout progressLayout = (ProgressLayout) this.findViewById(R.id.progress_layout);3. 通过progressLayout.showContent()来打开loading,或者你也可以使用属性:app:progress="true"mHandler.postDelayed(new Runnable() {     @Override     public void run() { //progressLayout.showContent();//加载成功,关闭loading progressLayout.showErrorText("加载失败");//加载失败,并显示提示信息     } }, 2000);利用Handler模拟了一个2秒的载入过程。如果载入成功,调用progressLayout.showContent()关闭loading。如果载入失败,调用progressLayout.showErrorText("加载失败")显示失败信息。
数据载入状态布局集成allprojects {     repositories {         maven { url "https://jitpack.io" }     } }dependencies {     compile 'com.github.nguyenhoanglam:ProgressLayout:1.0.1' }使用像使用RelativeLayout一样(其实ProgressLayout继承了RelativeLayout):<?xml version="1.0" encoding="utf-8"?> <com.nguyenhoanglam.progresslayout.ProgressLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:id="@ id/progressLayout"     android:layout_width="match_parent"     android:layout_height="match_parent">     <android.support.v7.widget.Toolbar         android:id="@ id/toolbar"         android:layout_width="match_parent"         android:layout_height="?attr/actionBarSize"         android:layout_alignParentTop="true"         android:background="@color/colorPrimary"         app:theme="@style/CustomToolbarTheme" />     <TextView         android:layout_width="match_parent"         android:layout_height="match_parent"         android:layout_below="@id/toolbar"         android:layout_centerInParent="true"         android:gravity="center"         android:text="YOUR CONTENT HERE"         android:textSize="24sp" /> </com.nguyenhoanglam.progresslayout.ProgressLayout>切换状态progressLayout.showLoading();//???? progressLayout.showEmpty();//???? progressLayout.showError();//????设置监听List<Integer> skipIds = new ArrayList<>(); skipIds.add(R.id.toolbar);         progressLayout.showLoading(skipIds);         progressLayout.showEmpty(ContextCompat.getDrawable(this, R.drawable.ic_empty), "Empty data",skipIds); //        progressLayout.showError(ContextCompat.getDrawable(this, R.drawable.ic_no_connection), "No connection", "RETRY", new View.OnClickListener() { //            @Override //            public void onClick(View view) { //                Toast.makeText(MainActivity.this, "Reloading...", Toast.LENGTH_SHORT).show(); //            } //        },skipIds);           // Show progress layout, hide all main views //        progressLayout.showLoading(); //        progressLayout.showEmpty(ContextCompat.getDrawable(this, R.drawable.ic_empty), "Empty data"); //        progressLayout.showError(ContextCompat.getDrawable(this, R.drawable.ic_no_connection), "No connection", "RETRY", new View.OnClickListener() { //            @Override //            public void onClick(View view) { //                Toast.makeText(MainActivity.this, "Reloading...", Toast.LENGTH_SHORT).show(); //            } //        });skipIds是ProgressLayout中显示的view id列表 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值