线性布局
- 有一个布局方向,水平或者竖直
- 在竖直布局下,左对齐、右对齐、水平居中生效
- 在水平布局下,顶部对齐、底部对齐、竖直居中生效
- 权重weight:按比例分配屏幕的剩余宽度或者高度(推荐在使用权重的时候使用0dp)
引用安卓系统的颜色以深灰色为例:background=”@android:color/dark_gray”
线性布局加相对布局是开发中用的最多的一种布局
相对布局
- 相对布局没有权重没有方向。
- 组件默认位置都是左上角,组件之间可以重叠
- 可以相对于父元素上下左右对齐,相对于父元素,水平居中、竖直居中、水平竖直同时居中
- 可以相对于其他组件上下左右对齐
可以布局于其他组件的上方、下方、左边、右边
帧布局
可以设置上下左右对齐,水平竖直居中,设置方式与线性布局一样
组件默认位置都是左上角,组件之间可以重叠
表格布局
表格布局不用定义宽高。
-tablerow表示一行,该子节点的每一个子节点都表示一列- TableLayout的一级子节点默认宽都是匹配父元素
- TableRow的子节点默认宽高都是包裹内容
LogCat
等级
- verbose:冗余,最低等级
- debug:调试
- info:正常等级的信息
- warn:警告
- error:错误
Android中的存储空间
内部存储空间
- RAM内存:运行内存,相当于电脑的内存
- ROM内存:存储内存,相当于电脑的硬盘
- 文件操作:getFileDir()获取文件的路径。具体是data/data/包名/files
- File file=new File(getFileDir(),”info.txt”)将会在data/data/包名/files文件夹中创建一个info.txt文件
- getCacheDir()获得文件路径,具体是data/data/包名/cache
- getCacheDir()和getFileDir()区别:当内存不足的时候cache文件夹中的文件会被删除。重要的信息不要保存在cache文件夹中。
外部存储空间(外部存储是可有可无的)
SD卡:相当于电脑的移动硬盘
- 2.2之前,sd卡路径:sdcard
- 4.3之前:sd卡路径:mnt/sdcard
- 4.3开始:sd卡路径:storage/sdcard
- 为了兼容低版本,所以在File Explorer中都保留了低版本的快捷路径
- 向sdcard写文件是需要权限的,但是只会报出警告。
- 写的权限是:
- android.permission.WRITE_EXTERNAL_STORAGE
- 4.0之前读取sdcard是不需要权限的.但是之后就需要权限了
- android.permission.READ_EXTERNAL_STORAGE
重点内容:返回一个File对象,其路径是sd卡的真实路径。
Environment.getExternalStorageDirectory
重点内容:
//MEDIA_UNKNOW:不能识别sd卡
//MEDIA_REMOVED:没有sd卡
//MEDIA_UNMOUNTED:sd卡存在但是没有挂载
//MEDIA_CHECKING:sd卡正在准备
//MEDIA_MOUNTED:sd卡已经挂载,可用
判断sd卡是否存在:
if(Environment.getExternalStorageState.equals(Environment.MEDIA_MOUNTED))
如何获取sd卡剩余容量:
所有存储设备都会被划分成若干个区块,每个区块有固定的大小,
存储设备的总大小=区块大小*区块数量。
windows系统中区块的大小默认是4K.
File path=Environment.getExternalStorageDirectory();
StatFs stat=new StatFs(path.getPath());
long blockSize;
//long totalBlocks;
long availableBlocks;
if(Build.VERSION.SDK_INT>Bulid.VERSION+CODES.JELLY_BEAN_MR2)
{
blockSize=stat.getBlockSizeLong();
totalBlocks=stat.getBlockCountLong();
availableBlocks=stat.getAvailableBlocksLong();
}else
{
blockSize=stat.getBlockSize();
totalBlocks=stat.getBlockCount();
availableBlocks=stat.getAvailableBlocks();
}
TextView tv=(TextView )findViewById(R.id.tv);
tv.setText(formatSize(availableBlocks*blockSize));
private String formatSize(long size)
{
return Formatter.formatFileSize(this,size);
}