安卓系统内存检测--StatFsProgressBar:自定义view
来源:互联网 发布:淘宝店铺五颗钻 编辑:程序博客网 时间:2024/05/11 21:49
先上图:
--
项目要求在很多界面中展示最底部的内存状态:占用空间,可用空间大小;考虑多界面复用,我自定义view
首先绘制布局、
[java] view plain copy<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="@dimen/base22dp" android:orientation="vertical"> <ProgressBar android:id="@+id/download_progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:progress="30" android:progressDrawable="@drawable/progressbar"/> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:id="@+id/tv_already" android:layout_width="wrap_content" android:layout_marginLeft="@dimen/base15dp" android:textColor="@color/white" android:textSize="@dimen/base13dp" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv_unused" android:layout_width="wrap_content" android:layout_marginLeft="@dimen/base15dp" android:textColor="@color/white" android:textSize="@dimen/base13dp" android:layout_height="wrap_content"/> </LinearLayout> </RelativeLayout>自定义view方法:主要通过statFs 方法获取总扇区大小以及剩余扇区大小然后求比,把值赋给progressbar
/** * 类名称: * 作者: aj * 时间: 2017/11/8 下午6:32 * 功能: */ public class MemoryProgressBarView extends RelativeLayout { private TextView tvAlready, tvUnused; private final ProgressBar progressBar; public MemoryProgressBarView(Context context, AttributeSet attrs) { super(context, attrs); // 加载布局 View inflate = LayoutInflater.from(context).inflate(R.layout.view_memory, this); // 获取控件 tvAlready = (TextView) findViewById(R.id.tv_already); tvUnused = (TextView) findViewById(R.id.tv_unused); progressBar = (ProgressBar) findViewById(R.id.download_progressBar); progressBar.setMax(100); } public void initProgressBar(Context context) { //获得sd卡的内存状态 File sdcardFileDir = Environment.getExternalStorageDirectory(); String sdcardMemory = getMemoryInfo(sdcardFileDir, context); //获得手机内部存储控件的状态 File dataFileDir = Environment.getDataDirectory(); String dataMemory = getMemoryInfo(dataFileDir, context); // tvAlready.setText("SD卡: " + sdcardMemory + "\n手机内部: " + dataMemory); tvAlready.setText("手机内部: " + dataMemory); } /** * 根据路径获取内存状态 * * @param path * @return */ @SuppressWarnings("deprecation") private String getMemoryInfo(File path, Context context) { //获得一个磁盘状态对象 StatFs stat = new StatFs(path.getPath()); //获得一个扇区的大小 long blockSize = stat.getBlockSize(); //获得扇区的总数 long totalBlocks = stat.getBlockCount(); //获得可用的扇区数量 long availableBlocks = stat.getAvailableBlocks(); //获得已用的扇区数量 long alreadyBlocks = totalBlocks - availableBlocks; //设置进度条 long l = (((alreadyBlocks * 100) / totalBlocks)); progressBar.setProgress((int) (l)); //总空间 // String totalMemory = Formatter.formatFileSize(context, totalBlocks * blockSize); //占用空间 String alreadyMemory = Formatter.formatFileSize(context, alreadyBlocks * blockSize); //可用空间 String availableMemory = Formatter.formatFileSize(context, availableBlocks * blockSize); return "占用空间:" + alreadyMemory + " 可用空间:" + availableMemory; } }
运用:在页面布局引入自定义的view
<com.CustomView.MemoryProgressBarView android:id="@+id/memory_progress" android:layout_width="match_parent" android:layout_height="@dimen/base22dp"/>
调用方法: memoryView = (MemoryProgressBarView) findViewById(R.id.memory_progress); memoryView.initProgressBar(context);
最终实现上图效果
实现上图效果 阅读全文
0 0
- 安卓系统内存检测--StatFsProgressBar:自定义view
- 安卓自定义View
- 安卓自定义view
- 安卓自定义View
- 安卓自定义View
- 安卓自定义view
- 安卓自定义View组件
- 安卓常用自定义View
- 安卓开发自定义View
- 安卓自定义View详解
- 安卓自定义View教程
- 安卓自定义View网址
- 安卓自定义View进阶
- 安卓自定义View进阶
- 安卓自定义分页view
- LeakCanary检测安卓内存泄漏
- LeakCanary检测安卓中的内存泄漏
- 安卓开发28:自定义View类
- 第十周——项目一(2)—二叉树的构造
- Hive内置聚合函数
- 第十周【项目一哈夫曼编码的算法验证】(4)
- 安装VLC到CentOS7
- 45 个快速提升数据科学技能的方法
- 安卓系统内存检测--StatFsProgressBar:自定义view
- 同步异步&阻塞非阻塞
- 开发和部署前端代码?
- 第八周项目三
- linux 系统服务问题
- Django-restframework14(下) 路由类Router
- 第十一周项目实践1 图基本算法库
- 设计模式之中介者模式
- 使用注解实现IoC的配置