English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
When we are doing Android development, we often encounter background thread execution, such as when downloading files. At this time, we hope that the customer can see that there is an operation being performed in the background. In this case, we can use a progress bar. Since it runs in the background, the purpose is to occupy as little space as possible in the current operation, allowing the user to perform other operations. The best method is to have a notification message with a progress bar in the notification bar. This article provides an example for the reader to refer to.
The effect diagram is as follows:
The main interface only has one button, so no file is provided
Layout file used for notification bar display is content_view.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00000000" android:orientation="vertical" android:padding="5dp"> <ImageView android:id="@"+id/content_view_image" android:layout_width="25dp" android:layout_height="25dp" android:src="@drawable/logo" /> <TextView android:id="@"+id/content_view_text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0%" android:textColor="#000000" android:layout_toRightOf="@id/content_view_image" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:layout_marginLeft="15dp" /> <ProgressBar android:id="@"+id/content_view_progress" android:layout_width="fill_parent" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Horizontal" android:max="100" android:layout_below="@id/content_view_image" android:layout_marginTop="4dp" /> </RelativeLayout>
Main running class:
package yyy.testandroid4; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.app.AlertDialog.Builder; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RemoteViews; import android.widget.Toast; public class TestAndroid4Activity extends Activity { private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 0: notif.contentView.setTextViewText(R.id.content_view_text1, len+"%"; notif.contentView.setProgressBar(R.id.content_view_progress, 100, len, false); manager.notify(0, notif); break; case 1: Toast.makeText(TestAndroid4Activity.this, "Download completed", 0).show(); break; default: break; } } }; private Button update, cancel; private int localVersion, serverVersion; private int len; private NotificationManager manager; private Notification notif; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); update = (Button) findViewById(R.id.update); update.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub //Activity to be opened after clicking on the notification bar Intent intent = new Intent(TestAndroid4Activity.this, OtherActivity.class); PendingIntent pIntent = PendingIntent.getActivity(TestAndroid4Activity.this, 0, intent, 0); manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notif = new Notification(); notif.icon = R.drawable.logo; notif.tickerText = "New Notification"; //The layout file used for the notification bar display notif.contentView = new RemoteViews(getPackageName(), R.layout.content_view); notif.contentIntent = pIntent; manager.notify(0, notif); new DownLoadThread().start(); } }); } } private class DownLoadThread extends Thread{ private Timer timer = new Timer(); @Override public void run() { // TODO Auto-generated method stub super.run(); timer.schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub Message msg = new Message(); msg.what = 0; msg.obj = len; handler.sendMessage(msg); if(len == 100){ timer.cancel(); handler.sendEmptyMessage(1); } } , 0, 1000); len = 0; try { while(len < 100){ len++; Thread.sleep(1000); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
That's all for this article. I hope it will be helpful to everyone's learning and I also hope everyone will support the Naiya Tutorial.
Declaration: The content of this article is from the network, and the copyright belongs to the original author. The content is contributed and uploaded by Internet users spontaneously. This website does not own the copyright, has not been manually edited, and does not assume relevant legal liability. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (Please replace # with @ when sending an email to report, and provide relevant evidence. Once verified, this site will immediately delete the content suspected of infringement.)