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外部存储的权限(不用声明都行、但是在将来的版本会改变)
网友评论