android界面数据存储,Android应用开发基础之数据存储和界面展现(二)
Android应用开发基础之数据存储和界面展现(二)
常见布局
相对布局
RelativeLayout
组件默认左对齐、顶部对齐
设置组件在指定组件的右边
android:layout_toRightOf=@id/tv1
设置在指定组件的下边
android:layout_below=@id/tv1
设置右对齐父元素
android:layout_alignParentRight=true
设置与指定组件右对齐
android:layout_alignRight=@id/tv1
线性布局
LinearLayout
指定各个节点的排列方向
android:orientation=horizontal
设置右对齐
android:layout_gravity=right
当竖直布局时,只能左右对齐和水平居中,顶部底部对齐竖直居中无效当水平布局时,只能顶部底部对齐和竖直居中使用match_parent时注意不要把其他组件顶出去
线性布局非常重要的一个属性:权重
android:layout_weight=1
权重设置的是按比例分配剩余的空间
帧布局
FrameLayout
默认组件都是左对齐和顶部对齐,每个组件相当于一个div
可以更改对齐方式
android:layout_gravity=bottom
不能相对于其他组件布局
表格布局
TableLayout
每个节点是一行,它的每个子节点是一列
表格布局中的节点可以不设置宽高,因为设置了也无效
根节点的子节点宽为匹配父元素,高为包裹内容节点的子节点宽为包裹内容,高为包裹内容以上默认属性无法修改
根节点中可以设置以下属性,表示让第1列拉伸填满屏幕宽度的剩余空间
android:stretchColumns=1
绝对布局
AbsoluteLayout
直接指定组件的x、y坐标
android:layout_x=144dp
android:layout_y=154dp
logcat
日志信息总共分为5个等级 verbosedebuginfowarnerror 定义过滤器方便查看System.out.print输出的日志级别是info,tag是System.out
Android提供的日志输出api
Log.v(TAG, 加油吧,童鞋们);
Log.d(TAG, 加油吧,童鞋们);
Log.i(TAG, 加油吧,童鞋们);
Log.w(TAG, 加油吧,童鞋们);
Log.e(TAG, 加油吧,童鞋们);
文件读写操作
Ram内存:运行内存,相当于电脑的内存Rom内存:内部存储空间,相当于电脑的硬盘sd卡:外部存储空间,相当于电脑的移动硬盘
在内部存储空间中读写文件
小案例:用户输入账号密码,勾选“记住账号密码”,点击登录按钮,登录的同时持久化保存账号和密码
1. 定义布局
2. 完成按钮的点击事件
弹土司提示用户登录成功
Toast.makeText(this, 登录成功, Toast.LENGTH_SHORT).show();
3. 拿到用户输入的数据
判断用户是否勾选保存账号密码
CheckBox cb = (CheckBox) findViewById(R.id.cb);
if(cb.isChecked()){
}
4. 开启io流把文件写入内部存储
直接开启文件输出流写数据
//持久化保存数据
File file = new File(data/data/com.itheima.rwinrom/info.txt);
FileOutputStream fos = new FileOutputStream(file);
fos.write((name + ## + pass).getBytes());
fos.close();
读取数据前先检测文件是否存在
if(file.exists())
读取保存的数据,也是直接开文件输入流读取
File file = new File(data/data/com.itheima.rwinrom/info.txt);
FileInputStream fis = new FileInputStream(file);
//把字节流转换成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String text = br.readLine();
String[] s = text.split(##);
读取到数据之后,回显至输入框
et_name.setText(s[0]);
et_pass.setText(s[1]);
应用只能在自己的包名目录下创建文件,不能到别人家去创建
直接复制项目
需要改动的地方: 项目名字应用包名R文件重新导包
使用路径api读写文件
getFilesDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/files 存放在这个路径下的文件,只要你不删,它就一直在
getCacheDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/cache
存放在这个路径下的文件,当内存不足时,有可能被删除
系统管理应用界面的清除缓存,会清除cache文件夹下的东西,清除数据,会清除整个包名目录下的东西
在外部存储读写数据
sd卡的路径
sdcard:2.3之前的sd卡路径mnt/sdcard:4.3之前的sd卡路径
storage/sdcard:4.3之后的sd卡路径
最简单的打开sd卡的方式
File file = new File(sdcard/info.txt);
写sd卡需要权限
读sd卡,在4.0之前不需要权限,4.0之后可以设置为需要
使用api获得sd卡的真实路径,部分手机品牌会更改sd卡的路径
Environment.getExternalStorageDirectory()
判断sd卡是否准备就绪
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
查看源代码查找获取sd卡剩余容量的代码
导入Settings项目
查找“可用空间”得到
可用空间
查找memory_available,得到
vcnlfYXZhaWxhYmxl" style="?android:attr/preferenceInformationStyle">
查找memorysdavail,得到
//这个字符串就是sd卡剩余容量
formatSize(availableBlocks * blockSize) + readOnly
//这两个参数相乘,得到sd卡以字节为单位的剩余容量
availableBlocks * blockSize
存储设备会被分为若干个区块,每个区块有固定的大小
区块大小 * 区块数量 等于 存储设备的总大小
Linux文件的访问权限
在Android中,每一个应用是一个独立的用户drwxrwxrwx第1位:d表示文件夹,-表示文件第2-4位:rwx,表示这个文件的拥有者用户(owner)对该文件的权限 r:读w:写x:执行 第5-7位:rwx,表示跟文件拥有者用户同组的用户(grouper)对该文件的权限第8-10位:rwx,表示其他用户组的用户(other)对该文件的权限
openFileOutput的四种模式
MODE_PRIVATE:-rw-rw----MODE_APPEND:-rw-rw----MODEWORLDWRITEABLE:-rw-rw--w-MODEWORLDREADABLE:-rw-rw-r--
SharedPreference
用SharedPreference存储账号密码
往SharedPreference里写数据
//拿到一个SharedPreference对象
SharedPreferences sp = getSharedPreferences(config, MODE_PRIVATE);
//拿到编辑器
Editor ed = sp.edit();
//写数据
ed.putBoolean(name, name);
ed.commit();
从SharedPreference里取数据
SharedPreferences sp = getSharedPreferences(config, MODE_PRIVATE);
//从SharedPreference里取数据
String name = sp.getBoolean(name, );
随堂笔记
线性布局
当方向为竖直时,水平方向的坐标设置生效,竖直方向的不生效当方向为水平,与上面相反
权重
按比例分配屏幕剩余空间权重最好搭配0dp使用
在Android系统中读写文件
Rom内存:存储内存
相当于电脑的硬盘内部存储空间 internal storage
SD卡:
相当于电脑的移动硬盘外部存储空间 external storage
sd卡状态
remove:没有插sd卡 unmount:sd卡已插,但是没有挂载 CHECKING:sd卡正在被系统遍历 MOUNTED:sd卡可以读写 MOUNTEDREADONLY:sd卡可用,但是只读
获取sd卡剩余容量
区块大小区块总数量可用区块的数量区块大小 * 区块总数量 = 存储设备的总大小区块大小 * 可用区块的数量 = 存储设备的可用大小
文件访问权限
d rwx rwx rwx
在Android中,每一个应用,都是一个独立的用户d:如果是d,就是文件夹,如果是-,就是文件
第一个rwx:决定owner用户对此文件有什么权限
r:读w:写x:执行(execute)
第二个rwx:决定grouper用户对此文件有什么权限
第三个rwx:决定other用户对此文件有什么权限
http://www.dengb.com/Androidjc/939478.htmlwww.dengb.comtruehttp://www.dengb.com/Androidjc/939478.htmlTechArticleAndroid应用开发基础之数据存储和界面展现(二) 常见布局 相对布局 RelativeLayout 组件默认左对齐、顶部对齐 设置组件在指定组件的右边...
android界面数据存储,Android应用开发基础之数据存储和界面展现(二)相关推荐
- Android App开发基础篇—数据存储(SQLite数据库)
Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...
- 数据分析师,BI开发人员,数据科学家和数据工程师的角色
数据分析师,BI开发人员,数据科学家和数据工程师的角色 本文由Saeed Aghabozorgi和Polong Lin共同撰写后,本人翻译而来,原文在此: https://cognitiveclass ...
- android文件存储教程,android开发基础教程—文件存储功能实现
文件存储: public class MainActivity extends Activity { EditText mname, mage; TextView mtv; @Override pro ...
- html5数据推送应用开发 代码,HTML5数据推送应用开发
目 录 前言 IX 第1章 SSE及其他 1 1.1 HTML5 2 1.2 数据推送 2 1.3 数据推送的其他名称 5 1.4 可能会用到SSE的应用 5 1.5 和WebSocket的对比 6 ...
- 大数据之-Hadoop3.x_MapReduce_开发总结---大数据之hadoop3.x工作笔记0137
然后总结一下,最近所学 首先是之前我们学了 第一部分,hadoop集群搭建,常用命令等 第二部分:HDFS的使用 第三部分:我们就是学了MapReduce对吧 MapReduce我们学了数据处理的过程 ...
- 虚幻引擎编辑器开发基础(一)
虚幻引擎编辑器开发基础(一) 文章目录 虚幻引擎编辑器开发基础(一) 一.前言 二.插件与模块 2.1 插件(Plguin) 2.1.1 插件的作用 2.1.2 插件的类型 2.1.3 插件结构 2. ...
- 七天学会「股票数据分析软件」的开发(中)
两天前,我写了 七天学会「股票数据分析软件」的开发(上),号召大家尝试着写写代码,不知道大家进度如何. 如果存在掌握一种技能的刚需,而且知道正确的学习方法,经过刻意练习,这门技能很快就能玩儿的有模有样 ...
- Web开发(一)·期末不挂之第一章·Web开发基础(不背就挂的基础知识)
Web开发基础 一.网站的访问过程 ✪✪✪ 二.Web应用 ✪✪✪ 三.其他 一.网站的访问过程 ✪✪✪ 网址: URL(互联网上标准资源的地址)组成部分: 协议:http:// 域名:-com/cn ...
- asp.net控件开发基础系列
本系列文章示例源码下载.各位如遇问题,请多查msdn,多利用网络.本人可能没时间一一回复,谢谢你们的支持,希望看到此文的人都能学好控件开发 http://www.cnblogs.com/Clingin ...
最新文章
- #define list_entry(ptr, type, member) \ container_of(ptr, type, member)
- Redis相比memcached
- SLAM | 三维重建方法之KinectFusion与ElasticFusion详解
- 如何修复XML内存“泄漏”
- Android之改变控件的背景及形态
- java 对象值拷贝_Java 值传递与对象拷贝
- Pytorch之认识Variable
- mysql buffer size_mysql read_buffer_size 设置多少合适
- spring boot集成redis
- 内容交付网络(CDN)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- java和大数据开发该选择哪个好就业?
- 1_11_4 23 python基础学习
- 【数据统计】— 峰度、偏度、点估计、区间估计、矩估计、最小二乘估计
- 警惕!黑客通过iPhone充电线劫持您的计算机
- java runnable main_【BUG】”main” prio=5 tid=1 RUNNABLE
- Gravatar头像简单介绍与使用教程
- QT5 隐藏系统标题栏,自己编写个性靓丽标题栏
- C++ pair 和make_pair的用法
- android ndk开发中初始化char数组报错问题
- 洛谷 U28036 Nagisa loves Tomoya(推式子) 题解
热门文章
- R语言使用ggpubr包的ggdotplot函数可视化水平棒棒糖图(自定义分组数据点色彩、自定义调色板、在两端添加点图的线段segments、整体排序从大到小、自定义数据点的大小、添加数值标签)
- R语言ggplot2可视化、在可视化区域中自定义添加多个大小不同矩形阴影区域、自定义配置大小不同矩形阴影区域的颜色(Adding multiple shadows/rectangles)
- 特征工程(feature engineering)是什么?特征工程(feature engineering)包含哪些方面?
- python的lambda表达式是什么?什么是回调函数?
- DASI_1_IntroToData
- 3Blue1Brown:“线性代数的本质”完整笔记
- 使用泰坦尼克号数据进行决策树、随机森林
- python dict遍历性能,Python:遍历list vs over dict items效率
- webscraper多页爬取_数据收集:web scraper 多页(无规律url)抓取
- html css 背景图片