Upgrade to Pro — share decks privately, control downloads, hide ads and more …

炎炎夏日學 Android 課程 - Part2: Android 元件介紹

炎炎夏日學 Android 課程 - Part2: Android 元件介紹

炎炎夏日學 Android 課程 - Part2: Android 元件介紹
(Kotlin EveryWhere 活動)

Johnny Sung

June 30, 2019
Tweet

More Decks by Johnny Sung

Other Decks in Programming

Transcript

  1. 資料夾結構 • app 模組 • AndroidManifest.xml • Kotlin 程式檔案 •

    Gradle 設定檔檔案 • 畫⾯面 XML 檔案 ( res/layout ) • 圖片檔案 ( res/drawable ) • 字串串檔 ( res/values/strings.xml )
  2. app 模組 AndroidManifest.xml Kotlin 程式檔案 單元測試 (Unit test) 檔案 Gradle

    設定檔檔案 畫⾯面 XML 檔案 圖片檔案 字串串檔
  3. MVC

  4. LinearLayout 線性布局 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <View android:layout_width="match_parent" android:layout_height="wrap_content"/> <View

    android:layout_width="match_parent" android:layout_height="wrap_content"/> <View android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
  5. RelativeLayout 相對布局 http://fiend1120.pixnet.net/blog/post/191809863 android:layout_alignParentTop 將此元件對⿑齊於佈局畫⾯面上邊線 android:layout_alignParentRight 將此元件對⿑齊於佈局畫⾯面右邊線 android:layout_alignParentLeft 將此元件對⿑齊於佈局畫⾯面左邊線 android:layout_alignParentBottom

    將此元件對⿑齊於佈局畫⾯面底線 android:layout_centerHorizontal 將該元件⽔水平居中於整個布局畫⾯面 android:layout_centerVertical 將該元件垂直居中於整個布局畫⾯面 android:layout_centerInParent 將該元件⽔水平及垂直均居中於整個布局畫⾯面
  6. RelativeLayout 相對布局 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <View android:id="@+id/view1" android:layout_width="match_parent" android:layout_height="wrap_content"/> <View

    android:id="@+id/view2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/view1"/> <View android:id="@+id/view3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/view2"/> </RelativeLayout>
  7. dp? px? 單位長度⼤大集合 • 螢幕長度 • px (pixel) 像素,RGB螢幕三原⾊色合成的⼀一個彩⾊色點 •

    物理理長度 • inch (inches) 英吋,1 Inch = 2.54 cm • pt (points) 點數,1pt = 1/72 Inch
 = 0.352777778 mm
  8. dp? px? 單位長度⼤大集合 • 密度 • dpi (dot per inch):⼀一英吋有幾個

    點 • ppi (pixel per inch):⼀一英⼨寸有多少 像素
  9. 密度 (Density) ( > 300dpi = Retina ) 160dpi (mdpi)

    326dpi (xhdpi) iPhone 3Gs iPhone 4
  10. dp? px? 單位長度⼤大集合 •dp, dip (Density-Independent Pixels)
 對應到在 160 dpi

    的螢幕上的幾個 px(像素) • 1 dp = 1/160 Inch = 0.15875 mm •sp (Scale Independent Pixels)
 對應在 160 dpi 的螢幕上的幾個 pt。
  11. 我的圖應該要多⼤大? • px = dip * (density / 160) •

    dip = px / (density / 160) • sp = pt * (density / 160) • 2:3:4:6:8 scaling ratio
  12. 我的圖應該要多⼤大? • ldpi (low) ~120dpi • mdpi (medium) ~160dpi •

    hdpi (high) ~240dpi • xhdpi (extra-high) ~320dpi • xxhdpi (extra-extra-high) ~480dpi • xxxhdpi (extra-extra-extra-high) ~640dpi https://www.pixplicity.com/dp-px-converter
  13. val mainHandler = Handler(Looper.getMainLooper()) val thread = Thread(Runnable { //

    Do something mainHandler.post { // My result } }) thread.start() (把繁重的事情放在這) (回傳結果給 Main Thread 顯⽰示)
  14. class ExampleUnitTest { @Test fun addition_isCorrect() { // Arrange val

    expected = 4 // Act val actual = 2 + 2 // Assert assertEquals(expected, actual) } } Arrange 準備 Act 執⾏行行 Aessrt 驗證