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应用开发基础之数据存储和界面展现(二)相关推荐

  1. Android App开发基础篇—数据存储(SQLite数据库)

    Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...

  2. 数据分析师,BI开发人员,数据科学家和数据工程师的角色

    数据分析师,BI开发人员,数据科学家和数据工程师的角色 本文由Saeed Aghabozorgi和Polong Lin共同撰写后,本人翻译而来,原文在此: https://cognitiveclass ...

  3. android文件存储教程,android开发基础教程—文件存储功能实现

    文件存储: public class MainActivity extends Activity { EditText mname, mage; TextView mtv; @Override pro ...

  4. html5数据推送应用开发 代码,HTML5数据推送应用开发

    目 录 前言 IX 第1章 SSE及其他 1 1.1 HTML5 2 1.2 数据推送 2 1.3 数据推送的其他名称 5 1.4 可能会用到SSE的应用 5 1.5 和WebSocket的对比 6 ...

  5. 大数据之-Hadoop3.x_MapReduce_开发总结---大数据之hadoop3.x工作笔记0137

    然后总结一下,最近所学 首先是之前我们学了 第一部分,hadoop集群搭建,常用命令等 第二部分:HDFS的使用 第三部分:我们就是学了MapReduce对吧 MapReduce我们学了数据处理的过程 ...

  6. 虚幻引擎编辑器开发基础(一)

    虚幻引擎编辑器开发基础(一) 文章目录 虚幻引擎编辑器开发基础(一) 一.前言 二.插件与模块 2.1 插件(Plguin) 2.1.1 插件的作用 2.1.2 插件的类型 2.1.3 插件结构 2. ...

  7. 七天学会「股票数据分析软件」的开发(中)

    两天前,我写了 七天学会「股票数据分析软件」的开发(上),号召大家尝试着写写代码,不知道大家进度如何. 如果存在掌握一种技能的刚需,而且知道正确的学习方法,经过刻意练习,这门技能很快就能玩儿的有模有样 ...

  8. Web开发(一)·期末不挂之第一章·Web开发基础(不背就挂的基础知识)

    Web开发基础 一.网站的访问过程 ✪✪✪ 二.Web应用 ✪✪✪ 三.其他 一.网站的访问过程 ✪✪✪ 网址: URL(互联网上标准资源的地址)组成部分: 协议:http:// 域名:-com/cn ...

  9. asp.net控件开发基础系列

    本系列文章示例源码下载.各位如遇问题,请多查msdn,多利用网络.本人可能没时间一一回复,谢谢你们的支持,希望看到此文的人都能学好控件开发 http://www.cnblogs.com/Clingin ...

最新文章

  1. #define list_entry(ptr, type, member) \   container_of(ptr, type, member)
  2. Redis相比memcached
  3. SLAM | 三维重建方法之KinectFusion与ElasticFusion详解
  4. 如何修复XML内存“泄漏”
  5. Android之改变控件的背景及形态
  6. java 对象值拷贝_Java 值传递与对象拷贝
  7. Pytorch之认识Variable
  8. mysql buffer size_mysql read_buffer_size 设置多少合适
  9. spring boot集成redis
  10. 内容交付网络(CDN)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  11. java和大数据开发该选择哪个好就业?
  12. 1_11_4 23 python基础学习
  13. 【数据统计】— 峰度、偏度、点估计、区间估计、矩估计、最小二乘估计
  14. 警惕!黑客通过iPhone充电线劫持您的计算机
  15. java runnable main_【BUG】”main” prio=5 tid=1 RUNNABLE
  16. Gravatar头像简单介绍与使用教程
  17. QT5 隐藏系统标题栏,自己编写个性靓丽标题栏
  18. C++ pair 和make_pair的用法
  19. android ndk开发中初始化char数组报错问题
  20. 洛谷 U28036 Nagisa loves Tomoya(推式子) 题解

热门文章

  1. R语言使用ggpubr包的ggdotplot函数可视化水平棒棒糖图(自定义分组数据点色彩、自定义调色板、在两端添加点图的线段segments、整体排序从大到小、自定义数据点的大小、添加数值标签)
  2. R语言ggplot2可视化、在可视化区域中自定义添加多个大小不同矩形阴影区域、自定义配置大小不同矩形阴影区域的颜色(Adding multiple shadows/rectangles)
  3. 特征工程(feature engineering)是什么?特征工程(feature engineering)包含哪些方面?
  4. python的lambda表达式是什么?什么是回调函数?
  5. DASI_1_IntroToData
  6. 3Blue1Brown:“线性代数的本质”完整笔记
  7. 使用泰坦尼克号数据进行决策树、随机森林
  8. python dict遍历性能,Python:遍历list vs over dict items效率
  9. webscraper多页爬取_数据收集:web scraper 多页(无规律url)抓取
  10. html css 背景图片