美文网首页
Android Training

Android Training

作者: neo已经被使用 | 来源:发表于2017-11-06 18:25 被阅读9次

    Getting Started

    1.Build your first app

    1.给DisplayMessageActivity新增点击返回MainActivity
        <activity android:name=".DisplayMessageActivity"
                  android:parentActivityName=".MainActivity" >
            <!-- The meta-data tag is required if you support API level 15 and lower -->
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
    2.Autoconnect会帮你添加约束
    3.使用Pixel XL作为Preview
    4.Default Margins设为16
    5. Chain > Create Horizontal Chain
       A chain is a bidirectional constraint between two or more views that allows you to lay out the chained views in unison
    6.Match constraints:意味着宽度扩展以满足水平约束和边界的定义(类似LinearLayout weight)
    
    image.png

    2.Supporting Different Devices

    1.Arabic or Hebrew 阿拉伯语或希伯来语使用RTL
    2.适配多语言:<resource type>-b+<language code>[+<country code>]    eg:
       values/
           strings.xml//默认英文语言
       values-b+es/
           strings.xml//西班牙的语言
    3.适配横屏:layout-land    适配大屏:layout-land  适配横屏和大屏:layout-large-land
    4.兼容不同Android版本:Build.VERSION.SDK_INT运行时获得当前的版本
      在xml中如果当前手机不支持某个属性的话会自动忽略
    

    3.Building a Dynamic UI with Fragments

    1.FragmentActivity 是为了解决Android11以前使用Fragment的
    2.AppCompatActivity是FragmentActivity的子类
    3.当FragmentTransaction.commit之前调用了addToBackStack(),Fragment被remove的时候不会destroy而是stop,按back键回退的时候,restart
    

    4.Interacting with Other Apps

    1.隐式意图要么使用Uri,要么setType设置MIME决定哪些app能接受这个intent
    2.使用隐式意图时,如果手机里面没有app可以接收,那么会crash,所以发送之前需要验证:
        PackageManager packageManager = getPackageManager();
        List activities = packageManager.queryIntentActivities(intent,
                PackageManager.MATCH_DEFAULT_ONLY);
        boolean isIntentSafe = activities.size() > 0;
      
        intent.resolveActivity(getPackageManager()) != null//验证这个intent会有至少有一个app能接收
    3.使用隐式意图时,如果手机里有多个app可以接收,那么系统会弹出一个弹窗让用户选择,但是下次会默认使用选择的app来接受同样的intent
       使用Intent.createChooser(intent, title),可以让用户每次都会选择可以接收intent的app
    4.Android 2.3以前读取联系人必须获取READ_CONTACTS权限、但是2.3以后联系人app会给你一个临时权限去查询指定的联系人(通过Intent.Uri)
      ,如果想要查询除了指定联系人以外其他联系人的信息,那就必须要获取READ_CONTACTS权限
      Data标签可以指定MIME、URI prefix、URI scheme或者这些组合
    5.为了能让Activity 接受隐式意图,必须设置category 标签为ca'tegory_default
    6.在外部存储中,为了让系统能够识别你的文件,你需要使用API constants eg:DIRECTORY_PICTURES,系统就会扫描到这个文件夹里的文件为照片
    7.getFreeSpace() 返回剩余空间容量,但是你不能写刚好那么多容量的文件。会报错
    8.app卸载时,外部存储的getExternalFilesDir()和所有的内部存储都会被删掉
    

    Saving App Data

    1.commit()是同步的,apply()先把改变保存到内存中的SharePreferences然后异步的保存到磁盘,就算保存失败也不会有通知。
    2.如果apply()在异步保存的同时,又调用了editor的commit(),那么commit()会被阻塞,直到所有的apply()执行完成!
    3.Framework层会确保apply()在切换声明周期时之前调用完
    4.manifest中使用android:installLocation 来指定app安装的位置(默认内部存储)
    5.目前而言所有app都有read外部存储的权限(不用声明都行、但是在将来的版本会改变)
    

    相关文章

      网友评论

          本文标题:Android Training

          本文链接:https://www.haomeiwen.com/subject/gwalmxtx.html