当前位置:天才代写 > tutorial > 安卓教程 > Android应用开发-数据存储和界面展现(一)

Android应用开发-数据存储和界面展现(一)

2021-02-26 14:02 星期五 所属: 安卓教程 浏览:508

普遍合理布局

相对性合理布局(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);
        }
 

    关键字:

天才代写-代写联系方式