發表文章

目前顯示的是 2月, 2018的文章

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

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

第05篇 相機功能 (純記錄,內有一堆外部連結)

看 陳董的相冊和照相功能實作的MainActivity.kt  和 他的部落格文章 ,純粹是記錄個人學習用QwQ。 我會用陳董的Code學習也是因為他用的方法是最簡單,也是最直覺的。 我的Android系統版本是7.1.1, 原本覺得要在mainfest設定一些內容才能啟動App, 但上方連結的內容Code其實可以直接正常運作。 延伸學習(幫助蠻大的是第一個官方課程) 1. 官方關於相機的訓練課程(Java) 2. 簡書 Android获取图片的三种方法(Java) 3. 2011年的stackFlow

Kotlin玩Android第04篇 有效使用BaseAdapter 和 ViewHolder

圖片
本文章我們將去新建一個繼承BaseAdapter的Adapter類別, 讓我們可以創造更不一樣的Listview的item內容並且能了解到ArrayAdapter到底默默為我們實做了哪些內容。 建議搭配影片服用。 聲明: 此篇文章主要是我觀看 Lets Build That App 的影片來後實作驗證的心得,然後記錄其中的不足之處(Ex: Android官方API文件等等),文章最後有附上參考資料來源(有興趣可以當作延伸閱讀)。 BaseAdapter(用來定義專屬的Adapter) 這個類別是一個抽象類別,所以必須撰寫一個新類別去繼承它, 並且必須override 裡面的4個方法。 fun getView (postion: Int , convertView: View ? , viewGroup: ViewGroup?): View 參數 position :指定回傳值view是回傳第幾行的view,例如0就代表是回傳的view是對應第0行的view。 converView : 曾經轉換過的view結果,需要判斷是否為空值。 viewGroup : view群組,可以間接取得呼叫getView的content, 例如:  viewGroup!!. context 回傳 某一行的view(可以從參數position得知是哪一行)。 fun getItem (p0: Int): Any 參數 p0 :取得第p0行的值 回傳 第p0的值,可能是字串或整數等等...依據你的資料來源而定。 fun getItemId (p0: Int): Long 回傳  第p0行的ID fun getCount (): Int 回傳  資料來源有幾筆資料 這個回傳值的大小會影響到顯示item的筆數, 通常這樣用:return array.size ViewHolder (ListView視圖的守護者) 參考官方說明: Your code might call  findViewById()  frequently during the scrolling of  ListView , which can slow down performance.

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我還在研究能否用更複雜的呈現,

Android小知識01:對文字匡輸入文字時,如何不讓鍵盤擋住文字匡或按鈕

圖片
左圖是還沒叫出鍵盤的畫面 右圖是叫出鍵盤,結果按鈕.文字匡全被擋住👀 如果你的文字匡在輸入時不要被鍵盤擋住, 在你的AndroidManifests.xml內可為你的activity新增一個屬性如下: &ltactivity android:name="某個名稱" android:windowsoftinputmode="adjustPan"&gt &lt/activity&gt 修改完後,你的手機鍵盤就會自動調整大小囉

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()函數內撰寫主要的