Android TV壁纸库之存储大小工具类及进度条显示

首先,我们看一下效果图:


项目地址这里

一、StatFs讲解:

官网地址


这是一个对系统上控件的总体信息的分析类,他是一个Unix statvfs 的包装器。

它的constructors是StatFs(String path),这里的path是一个fileSystem的根目录。

常用方法:

getAvilableBlocks():获得当前系统有多少可以被应用使用的块

getBlockSize():获得每一块的大小

getBlockCount():过得当前系统总共有多少块

我们主要使用这三个方法。

二、获取存储空间的工具类:

我们在代码中新建一个名为SDSizeUtils的java类,代码如下:

import android.content.Context;
import android.os.StatFs;
import android.text.format.Formatter;

import java.text.NumberFormat;

/**
 * Created by fengjw on 2018/3/21.
 */

public class SDSizeUtils {

    private final String INTERNAL_STORAGE_PATH = "/storage/emulated/0/"; //这里是因为电视机没有外置SD卡,所以获得内置SD卡路径

    private Context mContext;

    public SDSizeUtils(Context context){
        mContext = context;
    }

    /**
     * SD total size
     */
    public String getSDTotalSize(){
        StatFs fs = new StatFs(INTERNAL_STORAGE_PATH);
        long blockSize = fs.getBlockSize();
        long totalBlocks = fs.getBlockCount();
        return Formatter.formatFileSize(mContext, blockSize * totalBlocks);
    }

    /**
     * SD available size
     */
    public String getSDAvailableSize(){
        StatFs fs = new StatFs(INTERNAL_STORAGE_PATH);
        long blockSize = fs.getBlockSize();
        long availableBlocks = fs.getAvailableBlocks();
        return Formatter.formatFileSize(mContext, blockSize * availableBlocks);
    }

    /**
     * SD available size percent
     */
    public String getSizePercent(){
        StatFs fs = new StatFs(INTERNAL_STORAGE_PATH);
        long totalBlocks = fs.getBlockCount();
        long availableBlocks = fs.getAvailableBlocks();
        NumberFormat numberFormat = NumberFormat.getInstance();
        numberFormat.setMaximumFractionDigits(2);
        String percentSize = numberFormat.format(((float)availableBlocks / (float)totalBlocks) * 100);
        return percentSize;
    }

    public float getSizePercent(int value){
        StatFs fs = new StatFs(INTERNAL_STORAGE_PATH);
        long totalBlocks = fs.getBlockCount();
        Constants.debug("totalBlocks : " + totalBlocks);
        long availableBlocks = fs.getAvailableBlocks();
        float percentSize =  ((float)availableBlocks / (float)totalBlocks) * 100;
        return percentSize;
    }
}

我们这里主要注意两点:

1.Formatter:formatter是一个用于格式化常见的值的类,具体细节我也没有看。

2.NumberFormat是一个帮助将其他类型的数据转化为String型。

我们因为在现实的时候需要使用两个值,当前剩余空间的百分比(String类型和int类型),所以我们构建了两个方法分别输出结果。

三、ProgressBar的使用:

ProgressBar的介绍这里不再赘述,需要的自行去官网查看

首先,我们定义一个ProgressBar在layout布局中:

<ProgressBar
            android:id="@+id/info_storage_pb"
            android:layout_below="@+id/info_storage_tv"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_marginTop="10dp"
            android:max="100"
            android:progressDrawable="@drawable/info_progressbar"
            android:layout_width="match_parent"
            android:layout_height="10dp"/>

style定义了progressbar为水平方向;

progressDrawable是绘制progressbar,我们在其中主要定义如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
          android:drawable="@drawable/shape_progressbar_bg"/>
    <item android:id="@android:id/progress">
        <clip
            android:drawable="@drawable/shape_progressbar_progress"
            android:scaleWidth="100%"/>
    </item>
</layer-list>

background:设置进度条的背景颜色

clip:定义进度条 的上层颜色,边角的角度。

然后我们再在代码中设置setProgress来更改当前的进度。


总结:仅仅学会调用API很简单,但是要深入其中,还是很难,还有很长的路要走呀~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值