Android应用开发-数据存储和界面展现(一)
普遍合理布局
相对性合理布局(RelativeLayout)
-
部件默认设置部位全是左上方(左两端对齐、顶端两端对齐父原素),部件中间能够重合
-
能够相对性于父原素前后左右两端对齐,相对性于父原素,水平居中、垂直垂直居中、水准垂直另外垂直居中
-
设定右两端对齐父原素
android:layout_alignParentRight="true"
-
-
能够相对性于别的部件前后左右两端对齐
-
设定与特定部件右两端对齐
android:layout_alignRight="@id/tv1"
-
-
能够合理布局于别的部件的上边、下边、左侧、右侧
-
设定部件在特定部件的右侧
android:layout_toRightOf="@id/tv1"
-
设定在特定部件的下面
android:layout_below="@id/tv1"
-
线形合理布局(LinearLayout)
-
有一个合理布局方位,水准或是垂直
-
特定子部件按水准合理布局
android:orientation="horizontal"
-
-
在垂直合理布局下,设定左两端对齐、右两端对齐,水平居中会起效,其他失效
-
在水准合理布局下,设定顶端两端对齐、底端两端对齐、垂直垂直居中会起效,别的失效
-
应用match_parent时留意不必把别的部件顶出来
-
权重值:按占比分派显示屏的剩下总宽或是高宽比
android:layout_weight="1"
帧合理布局(FrameLayout)
-
部件默认设置部位全是左上方(左两端对齐、顶端两端对齐父原素),部件中间能够重合
-
能够设定前后左右两端对齐,水准垂直垂直居中,设定方法与线形合理布局一样
-
不可以相对性于别的部件合理布局
报表合理布局(TableLayout)
-
每一个TableRow连接点是一行,它的每一个子连接点是一列
-
报表合理布局中的连接点可以不设定高宽,由于设定了也失效
-
根节点TableLayout的子连接点宽为配对父原素,高为包囊內容
-
TableRow连接点的子连接点宽为包囊內容,高为包囊內容
-
之上默认设置特性没法改动
-
-
根节点中能够设定下列特性,表明让第一列拉申铺满显示屏总宽的剩下室内空间
android:stretchColumns="1"
肯定合理布局(AbsoluteLayout)
-
基础用不上
-
立即特定部件的x、y座标
android:layout_x="144dp" android:layout_y="154dp"
Logcat
-
日志信息内容一共分成五个级别
-
verbose:沉余,最少级别
-
debug:调节
-
info:一切正常级别的信息内容
-
warn:警示
-
error:不正确
-
-
界定过滤装置便捷查询
-
System.out.print輸出的日志等级是info,tag是System.out
-
Android出示的日志輸出api
Log.v(TAG, "奋斗吧,朋友们"); Log.d(TAG, "奋斗吧,朋友们"); Log.i(TAG, "奋斗吧,朋友们"); Log.w(TAG, "奋斗吧,朋友们"); Log.e(TAG, "奋斗吧,朋友们");
Android的储存
內部储存空间
-
RAM运行内存:运存,等同于电脑上的运行内存
-
ROM运行内存:储存运行内存,等同于电脑上的电脑硬盘(这一才算是內部储存空间,是务必有的)
外界储存空间
-
SD卡:等同于电脑上的移动盘(无关紧要)
-
2.2以前,SD卡途径:sdcard
-
4.3以前,SD卡途径:mnt/sdcard
-
4.3逐渐,SD卡途径:storage/sdcard
-
为了更好地兼容低版的程序流程,Android系统软件在原SD卡的部位都保存有一个"快捷方式图标"
-
如今买的手机上,如魅族MX5 16G版,这一16G事实上指的是外界储存空间,而生产厂家并沒有告知大家手机上的內部储存空间多少钱
在內部储存读写能力数据信息
用API得到內部储存的真正途径
-
getFilesDir()获得的file目标的途径是data/data/[package name]/files
- 储放在这个途径下的文档,只要你不删,它就一直在
-
getCacheDir()获得的file目标的途径是data/data/[package name]/cache
- 储放在这个途径下的文档,当内存不够时,有可能被删掉
-
管理信息系统运用页面的清理缓存,会消除cache文件夹名称下的物品,清除数据,会消除全部包名文件目录下的物品
在外界储存读写能力数据信息
-
非常简单的开启SD卡的方法
File file = new File("sdcard/xxx.txt");
-
应用API得到SD卡的真正途径,由于一部分手机制造商会变更SD卡的途径
File file = new File(Environment.getExternalStorageDirectory(),"xxx.txt")
-
分辨SD卡是不是就绪
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
-
SD卡关键的几类情况
-
MEDIA_UNKNOWN:不可以鉴别sd卡
-
MEDIA_REMOVED:沒有sd卡
-
MEDIA_UNMOUNTED:sd卡存有可是沒有初始化
-
MEDIA_CHECKING:sd卡已经提前准备
-
MEDIA_MOUNTED:sd卡早已初始化,能用
-
-
写SD卡必须管理权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
读SD卡,在4.0以前不用管理权限,4.0以后能够设定为必须
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
网页源代码搜索获得SD卡剩下容积的编码
-
导进Settings新项目
-
搜索“能用室内空间”获得
<string name="memory_available" msgid="418542433817289474">"能用室内空间"</string>
-
搜索"memory_available",获得
<Preference android:key="memory_sd_avail" style="?android:attr/preferenceInformationStyle" android:title="@string/memory_available" android:summary="00"/>
-
搜索"memory_sd_avail",获得
//这一字符串数组便是SD卡剩下容积 formatSize(availableBlocks * blockSize) readOnly //这两个主要参数乘积,获得SD卡以字节数为企业的剩下容积 availableBlocks * blockSize
-
储存设备会被分成数个区块链,每一个区块链有固定不动的尺寸
-
区块链尺寸 * 区块链总数 相当于 储存设备的总尺寸
文档访问限制
-
指的是谁可以浏览这一文档(夹)
-
在Android系统软件中,每一个运用,全是一个单独的客户
-
应用10个字母来表明
-
drwxrwxrwx
-
第一个英文字母:
-
d:表明文件夹名称
-
-:表明文档
-
-
第一组rwx:表明的是文档拥有人(owner)对该文件的管理权限
-
r:read,读
-
w:write,写
-
x:execute,实行
-
-
第二组rwx:表明的是跟文档拥有人归属于同一用户群(group)的客户对该文件的管理权限
-
第三组rwx:表明的是普通用户(other)对该文件的管理权限
SharedPreference
-
特别适合用于储存零散的简易的数据信息
-
往SharedPreference里写数据信息
//取得一个SharedPreference目标 SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE); //取得在线编辑器 Editor ed = sp.edit(); //写数据信息 ed.putString("name", "eniac"); ed.commit();
-
从SharedPreference里取数据信息
//取得一个SharedPreference目标 SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE); //从SharedPreference里取数据信息 String name = sp.getString("name", "");
转化成XML文件备份短消息
-
建立好多个虚似的短消息目标,存有list中
-
备份数据数据信息一般 全是备份数据至SD卡
应用StringBuffer拼凑字符串数组
-
把全部xml文件全部连接点append到sb目标里
sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"); //加上smss的逐渐连接点 sb.append("<smss>"); .......
-
把sb写到輸出流中
fos.write(sb.toString().getBytes());
应用XMl实例化器转化成xml文件
-
获得xml实例化器目标
XmlSerializer xs = Xml.newSerializer();
-
给实例化器设定輸出流
File file = new File(Environment.getExternalStorageDirectory(), "backupsms.xml"); FileOutputStream fos = new FileOutputStream(file); //给实例化器特定好輸出流 xs.setOutput(fos, "utf-8");
-
逐渐转化成xml文件
xs.startDocument("utf-8", true); xs.startTag(null, "smss"); ......
pull解析xml文档
-
初始XML資源一般储存在/res/xml/途径下
-
先自身写一个weather.xml文件,存一些天气数据
依据XML資源的ID获得分析该資源的在线解析
XmlPullParser xp = getResources().getXml(R.xml.weather);
逐渐分析
-
取得表针所属当今连接点的事情种类
int type = xp.getEventType();
-
事情种类关键有五种
-
START_DOCUMENT:xml头的事情种类
-
END_DOCUMENT:xml尾的事情种类
-
START_TAG:逐渐连接点的事情种类
-
END_TAG:完毕连接点的事情种类
-
TEXT:文字连接点的事情种类
-
-
假如获得到的事情种类并不是END_DOCUMENT,就表明分析都还没进行,如果是,分析进行,while循环系统完毕
while(type != XmlPullParser.END_DOCUMENT)
-
在我们分析到不一样连接点时,必须开展不一样的实际操作,因此 分辨一下当今连接点的name
-
当分析到weather的逐渐连接点时,new出list
-
当分析到city的逐渐连接点时,建立city目标,创建对象是为了更好地更便捷的储存将要分析到的文字
-
当分析到name逐渐连接点时,获得下一个连接点的文字內容,temp、pm也是一样
case XmlPullParser.START_TAG: //获得当今连接点的姓名 if("weather".equals(xp.getName())){ citys = new ArrayList<City>(); } else if("city".equals(xp.getName())){ city = new City(); } else if("name".equals(xp.getName())){ //获得当今连接点的下一个连接点的文字 String name = xp.nextText(); city.setName(name); } else if("temp".equals(xp.getName())){ String temp = xp.nextText(); city.setTemp(temp); } else if("pm".equals(xp.getName())){ String pm = xp.nextText(); city.setPm(pm); } break;
-
-
当分析到city的完毕连接点时,表明city的三个子连接点早已所有分析完后,把city目标加上至list
case XmlPullParser.END_TAG: if("city".equals(xp.getName())){ citys.add(city); }