發表文章

目前顯示的是有「android-kotlin」標籤的文章

第6篇 使用Sensor取得三軸加速度計的數值

圖片
因為想做一個可以靠轉動手機就能操控內部物件的App, 所以就研究如何取得加速度計或陀螺儀的數值。 影片: 心得: 學感測器也順便學到了Activity的生命週期。 因為當你註冊一個感測器監聽時,如果你切換到下個Activity時不關掉它,它可是會繼續監聽動作的喔!。 當你 跳離原本的Activtiy (Ex: 同個App跳到下一個Activity 或是 執行別的App), 系統會自動執行 onPause() 函數。 當你從原本的暫停狀態要 恢復原本的Activity , 系統會自動執行 onResume() 函數 所以必須override onPause() 在裡面添加 取消註冊監聽的程式碼 和 override onResume() 在裡面添加 重新註冊監聽的程式碼。 完整程式碼 因為在Android使用感測器的內容不需要特殊權限, 所以Manifests的內容基本上沒啥變化。

Kotlin玩Android第03篇 Listview(01 ArrayAdapter)

圖片
本篇文章將會稍微提到Adapter的功用, 並且會用到Anko的onClick和alert來簡化App的程式碼。 本文提到的ArrayAdapter是可以直接拿來用的類別,無需由其他物件繼承便可以使用。 除非你的 ListView 構造比較複雜,不然我覺得今天這篇文章講的對想使用ListView的人,使用ArrayAdapter也算是有點小用(我不是在沒罵人😂)。 實作的影片! Adapter本身算是listview跟資料來源的橋樑,如果你是實際寫個繼承BaseAdapter的類別並實際去override裡面的方法, 就會明白連個getItem或getItemId都得自己去定義,但在此例ArrayAdapter同時也扮演著資料來源的角色, 所以我們省去了override的麻煩。 然後宣告ArrayAdapter必須定義好item的資料型態,此例為String型態。 如上面程式碼片段可以直接用.addAll()一次添加多個字串。 然後再添加底下這行 main_listview. adapter = myAdapter ,這三行就讓我們定義的listView跟ArrayAdapter連接起來, 然後資料便會自動地顯示在listView上。 可惡!好像ArrayAdapter的用法太簡單反而沒什麼可講XD 畢竟還用到了Anko Layout的 onClick和alert這類工具函數, 可能就剩下基本的ArrayAdapter的自帶函數可講。 ArrayAdapter<T>.getItem(position: Int) 功用: 取得某個位置的值,用整數索引當作參數 ArrayAdapter<T>.remove(某個值: T)  那個某個值的型態是依據你ArrayAdapter當初建構T的型態而定, 在範例中是String型態。 功用: 從ArrayAdapter中移除某個值 ArrayAdapter<T>.clear()  功用: 清空ArrayAdapter中所有值。 完整的mainactivity.kt 完整的activity_main.xml 個人心得: ListView我還在研究能否用...

Kotlin玩Android第02篇 從別人的作品學習(折價計算機)

圖片
本篇文章就是藉由模仿修改 陳董 Don 的作品來達到學習的目的, 所以此篇文章不算教學只是我個人的見解。 參考 陳董 Don - Kotlin 開發第 2 天 Discount (Seekbar + Keyboard)   從中學到的幾件事 轉換如果拋出例外,try/catch 可以減少多行if/else判斷 if(edit_money.text?.toString()?.toDouble() == null){ edit_money.setText("0") } 上面程式碼的目的是將使用者輸入的文字轉成數字, 雖然我在xml介面設定我的edit_money這個EditText型態物件只能輸入數字, 但依然有些Bug會導致錯誤發生。 例子1: 將輸入清空,譬如說原本是輸入值是0, 但你連0都刪除就會出現底下例外。 java.lang.NumberFormatException: empty String 例子2: 還有因為我的輸入可以接受.87之類的浮點數文字, 都能被正確轉換成Double型態,但是如果變成"."就會出錯。 java.lang.NumberFormatException: For input string: "." 所以我將程式碼改成底下使用try/catch,轉換型態失敗丟出例外直接歸"0"就好 try { edit_money.text?.toString()?.toDouble() } catch (e: NumberFormatException){// 當無法正常轉換成Double型態 edit_money.setText("0") } EditText的函數 addTextChangedListener (...) 此函數的用意是:設定 "當EditText文字改變時"的Listener,至於那個Listener必須是繼承 TextWatcher 。 撰寫的過程基本上就是寫一個object繼承TextWacher並override內部的三個函數。 但實際上我只在afterTextChanged()函數內撰寫主要的...

Kotlin玩Android第01篇 使用Anko Layout建立第一個App

圖片
情境(Context):     此文章是記錄我用Kotlin學習Android應用的第一個紀錄, 將會採用Anko Layout的方式去設計我的App畫面。     我曾在大一時學過Java,但我並沒有用它撰寫過Android程式(直到現在XD)。     作業系統:OSX 10.13.2       開發環境:Android Studio 3.0.1      Anko版本: 0.10.4     手機系統: Android 7.1.1 問題(Problem):     首先Kotlin在Android一樣可以用layout資源裡的XML進行畫面排版, 雖然XML太難寫可讀性又很差, 但Android Studio可以透過拖曳物件的方式進行構圖,並且有很多視覺化的設計元件。 到底為什麼還要學 Anko Layout 的DSL?      Anko Layout 有說明不使用XML的幾個理由。 排除掉XML解析成Java程序要耗費手機CPU資源這類原因。 個人喜歡DSL的理由主要是: 1. DSL寫起來更符合Kotlin的簡潔風格,Layout的預設參數是好物。 2.邏輯排版 & 配合使用Anko函數都很簡單。 3. 帥! 缺點大概就是無法拖曳物件排版,據說可以用Plugin將排版完的xml轉成anko layout,但要反向轉換就沒辦法了。(個人沒試過將xml轉成DSL) Anko 小知識: 如果你想在AndroidStudio 中預覽Anko Layout的視覺構圖, 請點選"Preferences" -> "Plugin" -> "install JetBrains plugin" -> 安裝套件 Anko Support 言歸正傳 ,我們真正想研究的問題是 如何用Anko寫一個App ? 功能包含 按鈕觸發、垂直排版、換頁、換頁傳遞資料 答案(Solution): 第零步:先安裝 JDK8  然後安裝 AndroidSt...