Android-progressBar的使用方法

需求描述

先说下需求:

  • 项目需要,在上传数据前显示progressBar,上传完成后退出该页面
  • 因为是合作开发,看了之前哥们写的代码,感觉不太好,原因下文具体讲解

大体看了下之前哥们的代码,样子大概是这样:
在这里插入图片描述
跟郭霖的《第一行代码》里的案例类似,将progressBar写入布局中,然后findViewById将该progressBar找到,设置其可见性从而决定显示和隐藏。

这个方法的不好之处在于:progressBar在布局文件中,是参与布局的,如果我的整体布局是ScrollView,那么只能将progressBar放置在最底部,这样用户体验就很好,因为用户不一定每次都能看到最下面的progressBar显示,所以:

我思考,能不能将progressBar显示在屏幕下方,于是百度到一篇博客,发现刚好符合我的需求,稍加修改即可使用

代码

MainActivity.java

package com.example.progressbardemo;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {
	private Button startBtn;
	private Context mContext;
	private ProgressBar mProgressBar;
	private ProgressDialog mProgressDialog;

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

	private void initView() {
		startBtn = findViewById(R.id.start);
		startBtn.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				createProgressBar();
			}
		});
	}

	private void createProgressBar() {
		mContext = this;
		//android.R.id.content为你提供了视图的根元素,而不必知道它的实际名称/类型/ ID。
		FrameLayout rootFrameLayout = (FrameLayout) findViewById(android.R.id.content);
		FrameLayout.LayoutParams layoutParams =
				new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
		layoutParams.gravity = Gravity.CENTER | Gravity.BOTTOM;
		mProgressBar = new ProgressBar(mContext);
		mProgressBar.setLayoutParams(layoutParams);
		mProgressBar.setVisibility(View.VISIBLE);
		rootFrameLayout.addView(mProgressBar);
	}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

实现效果图

在这里插入图片描述点击开始按钮,出现progressBar!

代码分析

核心点一:FrameLayout
 FrameLayout十分罕见,做开发以来从来没有用过,简单查下资料,其功能是显示单一Widget.

核心点二:android.R.id.content
 本以为我需要在我Activity的根布局上加入id:content,结果运行发现不用加也完全ok,于是查资料想知道android.R.id.content是何方神圣。

参考博客 android.R.id.content 提供了视图的根元素,是一个FrameLayout,只有一个子元素,就是平时在onCreate方法中设置的setContentView。也即,当我们在Layout文件中设置一个布局文件时,实际上该布局被一个FrameLayout所包含。

两个核心点理解之后上面的代码就完全明白了!

发布了82 篇原创文章 · 获赞 63 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览