Android Training

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設(shè)為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之前調(diào)用了addToBackStack(),F(xiàn)ragment被remove的時候不會destroy而是stop,按back鍵回退的時候,restart

4.Interacting with Other Apps

1.隱式意圖要么使用Uri,要么setType設(shè)置MIME決定哪些app能接受這個intent
2.使用隱式意圖時,如果手機里面沒有app可以接收,那么會crash,所以發(fā)送之前需要驗證:
    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可以接收,那么系統(tǒng)會彈出一個彈窗讓用戶選擇,但是下次會默認使用選擇的app來接受同樣的intent
   使用Intent.createChooser(intent, title),可以讓用戶每次都會選擇可以接收intent的app
4.Android 2.3以前讀取聯(lián)系人必須獲取READ_CONTACTS權(quán)限、但是2.3以后聯(lián)系人app會給你一個臨時權(quán)限去查詢指定的聯(lián)系人(通過Intent.Uri)
  ,如果想要查詢除了指定聯(lián)系人以外其他聯(lián)系人的信息,那就必須要獲取READ_CONTACTS權(quán)限
  Data標簽可以指定MIME、URI prefix、URI scheme或者這些組合
5.為了能讓Activity 接受隱式意圖,必須設(shè)置category 標簽為ca'tegory_default
6.在外部存儲中,為了讓系統(tǒng)能夠識別你的文件,你需要使用API constants eg:DIRECTORY_PICTURES,系統(tǒng)就會掃描到這個文件夾里的文件為照片
7.getFreeSpace() 返回剩余空間容量,但是你不能寫剛好那么多容量的文件。會報錯
8.app卸載時,外部存儲的getExternalFilesDir()和所有的內(nèi)部存儲都會被刪掉

Saving App Data

1.commit()是同步的,apply()先把改變保存到內(nèi)存中的SharePreferences然后異步的保存到磁盤,就算保存失敗也不會有通知。
2.如果apply()在異步保存的同時,又調(diào)用了editor的commit(),那么commit()會被阻塞,直到所有的apply()執(zhí)行完成!
3.Framework層會確保apply()在切換聲明周期時之前調(diào)用完
4.manifest中使用android:installLocation 來指定app安裝的位置(默認內(nèi)部存儲)
5.目前而言所有app都有read外部存儲的權(quán)限(不用聲明都行、但是在將來的版本會改變)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容