Android kotlin tutorial (for expert in Java)

•十二月 28, 2018 • 發表迴響

Android kotlin tutorial(for expert in Java)

(一)轉換Java檔案為Kotlin(trans from java file to kotlin)

  1. 轉檔案(trans file)
    ctrl+shift+a -> Convert Java File to Kotlin File
    or ctrl+shift+alt+k
  2. 設置環境(environment)
    Tools -> Kotlin -> Configure Kotlin in Project
  3. 同步gradle(sync with gradle)
    Sync Project with Gradle Files

(二)用layout id作為參數

  • app gradle加入

apply plugin: ‘kotlin-android-extensions’

android{
androidExtensions {
experimental = true
}
}

  • <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!">
  • 於kotlin檔案中加入(activity_main為layout檔案)
    import kotlinx.android.synthetic.main.activity_main.*

textView.setText(“Hi");


(三)kotlin onclick

  • global
    • class MainActivity : AppCompatActivity(), View.OnClickListener
      override fun onClick(v: View?) {
      when(v?.id){
      R.id.textView->
      Toast.makeText(this, “Click", Toast.LENGTH_SHORT);
      }
      }
  • local
    • textView.setOnClickListener{
      Toast.makeText(this, “Click", Toast.LENGTH_SHORT);
      };
    • textView.setOnClickListener(object : View.OnClickListener{
      override fun onClick(v: View?) {
      }
      });
      or
      object click: View.OnClickListener{
      override fun onClick(v: View?) {
      TODO(“not implemented") //To change body of created functions use File | Settings | File Templates.
      }}
    • textView.setOnClickListener({textView->toast(“")});
      textView.setOnClickListener({toast(“")});
      fun toast(str : String){}

(四)自動Parcelize

  • import kotlinx.android.parcel.Parcelize

@Parcelize
class activity1(var b:String):Parcelable{
var a = 1;
}

  • 設定cach策略, global或者per container設定(含activity, fragment, view及LayoutContainer implementation)
    • global:
      androidExtensions {
      defaultCacheImplementation = “HASH_MAP" // also SPARSE_ARRAY, NONE
      }
    • per container:
      @ContainerOptions(cache = CacheImplementation.NO_CACHE)
      class MyActivity : Activity()

Extra

  • Kotlin轉回Java

open kotlin file in android studio
go to tools -> kotlin ->kotlin bytecode
in the new window that open beside your kotlin file , click the decompile button . it will create java equivalent of your kotlin file .


(五)初始化參數(init var)

  • //參數(var)
    • var n = 2
      var c: Int
      //val equal final
      val t: Int?//? means nullable
      t = null
  • //字串(string)
    • var s = “hi"
      var s2 = “n is $n"// will be: n is 2
      var s3 = “${s+n}"// will be: hi2
      var s4 = “${s.replace(“i","ello")} everyone"//will be: hello everyone
      var s5 = s.replace(“i","ello") + " everyone"//will be: hello everyone
  • //參數為array, list( var is array or list)
    • var l:List<String> = listOf(“a","b","c")
      var arr = arrayOf(“a","b","c")
      var arrl = arrayListOf(“a","b","c")
      val x: IntArray = intArrayOf(1, 2, 3)
      var list = mutableListOf(“111″,"222″,"333″);//equal arraylist
  • //參數為函式(var as function)
    • val sumxy: (Int, Int) -> Int = {x,y -> x+y}
      var sn = 3 + sumxy(1, 2)
  • //static, equal public static int a() { return 1; }
    • var c1 = c();
      c1.a();
      class c{
      companion object {
      fun a() : Int = 1
      }
      }
  • sum(1, 3)
    sum2(1, 3)
    vars(1, 2, 3);
    vararr(arr);
    println();
    println(“s3: “+s3)
    println(“s4: “+s4)
    println(“s5: “+s5)

(六)函式(funtion)

  • function
    • fun f(){}
      fun p(){print(“hi")}
      fun fs():String {
      var str = “"
      return str;
      }
  • 參數(var)
    • fun sum(a:Int, b: Int): Int{
      return a + b
      }
      fun sum2(a: Int, b: Int) = a + b

============================================
(七)公用函式(utility funtion) for, switch,…

  • loop相關
    • for(i in 1..3){//123
      print(i)
      }
      for(i in 1 until 3){//12
      print(i)
      }
      for(i in 5 downTo 0 step 2){//531
      print(i)
      }
      for (i in list.indices) {
      print(i)
      }
      (1..12 step 3).last //10
  • (extend var)
    • fun vars(vararg vs: Int){
      for(v in vs){
      print(v)
      }
      }
  • 條件相關
    • switch改為when
    • when(i){
      1 -> print(“1″)
      2 -> print(“2″)
      else -> {
      print(“else")
      }
      }
  • list相關
    • var list = mutableListOf(“111″,"222″,"333″);//equal arraylist
      swap(list, 0,2)
      or
      list.swap(0,2)
      fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
      val tmp = this[index1] // ‘this’ corresponds to the list
      this[index1] = this[index2]
      this[index2] = tmp
      }
    • listOf(1,2,3,4).forEach{
      print(it)
      }

(八)類別(class)

  • import adam.Home as aHome// can us aHome as adam.Home
  • 初始化init
    • val cc:c;
      cc = c();
      //or
      val cc = c
  • open class c{}{//預設不能繼承, 除非加上open(default cannot inherit, if need, add open)
    • //創物件時可在constructor初始, 或在init, 與constructor不同的是can have multiple
      init {}
      fun f();
      }
  • 可以增加類別的function
    • fun c.print(){
      }
  • 實作&繼承extends&implement都用:取代
    • @Parcelize
      class activity1(var b:String):Parcelable, interfaceAdam{
      override val p: Int = 5
      override fun interfacef() {
      }
      }
      interface interfaceAdam : interfaceAdam2{//interface可以繼承interface但不能繼承class, 允許interface實作function
      val p:Int
      val p2:String get() = “foo" //can choose overrite or not
      fun interfacef()
      fun interfacef2(){//can choose overrite or not
      System.out.println(“f2 print");
      }
      }
    • class activity2(s:String): activity1(“by a2″) {
      var ss:String
      init {
      ss = s;//參數必須在init初始化, 或者一開始就初始化
      }
      }
      or
      class activity2(s:String): activity1(“by a2″) {
      var ss:String = s
      constructor(ctx: Context, str:String) : this(str) {
      ss = str;
      }
      }
    • //var a2 = activity2(this,"a222″)
      //var a2 = activity2(“a222″)
      class activity2(s:String): activity1(“by a2″) {
      var ss:String
      constructor(ctx: Context, str:String) : this(str) {
      ss = str;
      }
      init {
      ss = s;
      }
      }
  • 純資料
    • data class User(val name: String, val age: Int)
      //可另寫copy
      fun copy(name: String = this.name, age: Int = this.age) = User(name, age)
      //也可用原生copy
      var u1 = activity1.User(“adam", 30);
      var u2 = u1.copy(age = 20);
  • 泛型template
    • var b = Box(1);
      var b2 = Box(“2″);
      class Box<T>(t:T){
      }
  • 列舉enum, 可以初始化, 要初始化就全部都要(can init)
    • enum class Color(val rgb:Int){
      RED(0xFF0000),
      GREEN(0x00FF00)
      }
  • singleton
    • //val a = Test.instance
      class Test {
      companion object {
      val instance = Test()
      }
      }
廣告

板橋、中永和一日遊好玩景點私房精選

•十月 12, 2018 • 發表迴響

在中和住了30年,周末假日最常遇到的問題就是要去哪走走,每次google板橋、中永和哪裡好玩,有時看到的點很無聊…因此特地整理出一些優質的地方,讓各位板橋中永和人能有個地方跑跑。

 

全天適合

中和-華新街 5★  家庭 朋友 情侶

華新街又被大家稱作緬甸街,這條街上到處是緬甸、泰國、雲南、清真…等各式美食,一路走過能看見許多來台灣工作的東南亞居民,可以說不用出國就到國外拉~在這到處充滿著濃濃的異國風情,不只是餐廳,還有許多販賣東南亞商品的店家,可以看到緬泰的報紙、歌手CD、各種調味料及泡麵,在部分餐廳甚至能一邊吃飯邊聽著東南亞的歌曲呢!不論是朋友還是情侶家庭,都很適合來這一逛。另外,最著名的是每年4月中的潑水節,更是不容錯過的活動喔!

 

中和-烘爐地福德宮 5★  家庭 情侶

中和最著名的土地公廟,在遠遠的地方就能看到一尊巨大的土地公像聳立在山腰,白天可以從山腳下的登山步道、山腰的宮廟當作起點登山,嫌累的人亦可以繼續汽機車往上,能省近半的路程喔!不論在山腰或山頂的公廟,這兩個點看出去的景色,把板橋中永和以及台北市的大部分景色都囊括進去,當然新光三越及101也能看到。晚上半山腰的土地公像在燈光的點綴之下更宏偉,白天景色就美美的福德宮更是中永和板橋看夜景的不二首選!適合情侶及家庭前來。

 

中和-四號公園 4.5★  家庭 朋友 情侶

親子或情侶能到公園中的圖書館租借影片來看,公園也很適合遛狗,到了晚上,這裡會有許多人在慢跑,朋友或情侶不訪相約來此運動吧!但也因為不是專業的跑道,人來人往及地面的情況,因此只給3.5顆星。

 

中和-錦和運動公園 4★ 個人 朋友

顧名思義,是個慢跑運動的好地方,免費的場所,晚上能看到許多人參與,但會給這裡3.5顆星的理由絕對不只這樣,這裡還有運動中心,這才是重點!不論游泳健身,在國家的設施通常價格是最實惠的,健身一小時只要50元,最多能延遲10分鐘,也就是70分鐘50元的價格,超划算,不過汗流浹背的感覺,我想比較適合跟朋友來此吧。

 

中和-新月橋-恐龍特區4★ 個人 朋友 家庭 情侶

白天的河濱景色,在新月橋能看到窪地,一路到華中橋下的恐龍特區,可以看到各種恐龍的模型及彩繪,很適合拍照呢!夜晚的新月橋在燈光輝映下更是美麗,一路能優游河岸,享受風涼爽的吹著,大概唯一的缺點就是體力不足者無法,要衡量一下兩地的距離喔!

 

中和-北一游泳池 4★ 個人 家庭 情侶

通常建議一定要買套票,算下來一張接近100元,裡面享有水柱按摩、藥浴池、烤箱、蒸氣室,泳池也有室內室外池,另外有個小小健身房,器材簡陋了點就沒進去嘗試,整體是個很划算的地方,家庭或情侶都很適合喔!

 

中和-水藍天游泳池4★ 個人 家庭 情侶

據說老闆跟北一游泳池是同一個,設備的放置比較分散,也稍微沒有北一這麼的新,但藥池的營造日式泡湯的感覺很愛。

 

板橋-435藝文特區 3.5★ 朋友 家庭 情侶

適合與有藝術氣息朋友,或者家庭來這空曠的場所帶小孩走跳,夜晚的景色還不錯看,情侶可。

 

板橋-黃石市場 3.5★ 個人 朋友

一個可以吃吃喝喝的地方,有很多傳統美食小吃。

 

白天適合

中和-一線天4★ 情侶 

上山很近的一個小小景點,為何還能擁有3.5顆星的評價呢?因為它很有趣!上來到一間寺廟後,往右手邊過去一個小步道,沒幾步的距離就會看到一個狹小的縫,縫中踏著狹窄的石階而上,胖一點的人甚至某的部分還得側身而過,一出洞口便發現,來到了山上,回頭看著不起眼的地上小洞,很難想像是從這小洞上來。奇特的體驗,很適合帶情侶嘗鮮。

 

中和-白馬寺 3★ 個人 情侶 

中永和板橋很近就到達山腰上的好地方之一,最大特色是日式的寺廟建築,適合情侶上來拍照,就個人而言的話,在這日式寺廟看著中永和的廣闊景色也算放鬆心情,但除了拍照及上山散心外也沒其他活動了。

 

永和-機車練習場 3★ 情侶

相信許多人都很難忘懷考機車的場景,除了板橋監理站能看到考生緊張的心情外,也能來這裡回味,來挑戰新型的二段式代轉等路考吧!

 

板橋-林家花園 3★ 個人 家庭 情侶

台灣保有難得的園林景觀,不用大老遠的跑到蘇州杭州,只要在林家花園就能看到。

 

晚上適合

永和-樂華夜市 5★ 個人 朋友 家庭 情侶

中永和人幾乎人人知道的夜市,位置地點也很好,對中永和過去都很方便,各種衣服小吃都很齊全,牛排鐵板燒林立,算是吃喝購物的好地方。推薦:下港、牛師傅牛排、肥豬的攤

 

中和-興南夜市 4.5★ 個人 朋友 家庭 情侶

當年跟樂華齊名的老夜市,可惜的是中間禁止擺攤後,汽機車能進入,人車爭道也把人氣沖散,一些老店面依然存在,比起其他夜市,這裡的消費更平價。這大概也是唯一能騎機車逛的夜市,對於懶得走的人是個福音。推薦:李家麵館刀削麵、鄉下地方黃燜雞、阿美臭豆腐

 

板橋-南雅夜市 4.5★ 個人 朋友 家庭 情侶

跟樂華一樣熱鬧,射氣球、打彈珠…各種遊戲攤林立,吃喝購物遊戲的場所,主要的缺點是人群比較繁雜。推薦:蚵仔之家、想吃大相撲麻糬、板橋小籠包

板橋-新北市政府 3.5★ 情侶

32樓免費的觀景台夜景,情侶約會可以來看看嘗鮮。

常見致癌食物

•十月 6, 2018 • 發表迴響

已經看過許多親友因為癌症而走,特別整理了一下非常常見,卻容易增加癌症機率的食物,也有列出相關容易引發的部位。

[油炸] (子宮頸癌、胃癌、膽囊癌、大腸直腸癌、腎癌及乳癌)

雞排

油條

薯條

臭豆腐

爆米花

 

[炭烤、燻製] (胃癌、大腸結腸癌、乳癌)

香腸

烤肉串

燻肉

燻魚

 

[加工肉品] (胃癌、結腸直腸癌)

火腿

熱狗

培根

 

[醃製品] (食管癌、胃癌、肝癌和大腸癌)

鹹魚

鹹蛋

醬菜

[菸] (肺癌、呼吸道癌症、口腔癌)

[酒] (直腸癌、結腸癌、乳癌)

過量

[檳榔] (口腔癌、咽喉癌)

 

免費學英文/英聽的好平台

•十月 6, 2018 • 發表迴響

台灣學生學習英文最常遇到的兩個問題,不外乎是單字不夠、聽力與口說很差,單字不夠,可能靠BBC新聞網站,或者其他雜誌還能慢慢提升,但程度的差異太大時,提升的效率當然也不好,在這推薦作者最常用的學習英文網站VoiceTube

QQ图片20181006154224.png

這個網站與其他免費學習平台有什麼最大的差異呢?

他有分級!!!可以根據自己TOEIC的分數,選到符合自己程度的影片來看,由於影片來自youtube,可以看到各種有趣的小短片,根據收藏人數及影片長短時間,甚至腔調來選擇。

QQ图片20181006154702.png

許多影片都擁有中文字幕及英文字幕的開關,更能點擊單字就出現翻譯,非常方便,適合現在趕時間,討厭花費一兩個小時在英文學習上的人使用。

QQ图片20181006154819

 

網站連結:

VoiceTube

ColorSpy超好用抓色碼工具

•十月 6, 2018 • 發表迴響

不論是喜歡玩Photoshop、3D動畫或者是程式設計師…等,難免都會參考別人設計的樣式,此時知道對方顏色的選擇就很重要了,在這裡推薦一個好用的小軟體 – ColorSpy,開啟後隨著滑鼠移動,就能輕易知道畫面上的色碼為何。

QQ图片20181006153108

下載連結:

http://www.microtask.ca/colorspy.html

鼻過敏長期預防及緊急紓緩方式之親身體驗

•十月 6, 2018 • 發表迴響

作者本身從小就是個嚴重鼻過敏患者,中醫、西醫大小診所不下二十間都看無效,西醫普遍都只開藥,噴鼻子舒緩當下(問題連當下舒緩都無效啊!!!),中醫換來換去都那幾樣藥材,辛夷、黃耆之類,看了十幾二十年的經驗就是,通通無效…

本草綱目作者李時珍,自己也是身患各種病痛,才會激起這麼大的毅力整理出這本著作,同樣身為鼻過敏患者,深深了解不論白天夜晚都鼻塞的痛苦,尤其是半夜鼻孔兩邊都堵塞,嚴重到只能張嘴呼吸,沒經歷過的人,真別小看身體及精神上的折磨。

秉持著李時珍的精神,以下為作者本身親自體驗有效的紓緩方式,分為預防與緊急處理

預防:

  1. 環境,遠離骯髒空氣以及潮濕的環境,清洗枕頭被單,作者先前離開台北到上海/蘇州時,發現過敏的情況很少發生,很有可能與台北潮濕的氣候有關。
  2. 運動,本人最常做的是慢跑,健身,騎單車,打泰拳,一周運動三四次的那段時間,基本很少過敏,
  3. 早睡早起,由於作者本身工作性質容易晚睡,有陣子努力調整成早睡早起,晚上十一點睡覺,早上八點左右起床,睡滿八個小時又在正確的時間下,過敏的發作機率也明顯有改善。
  4. 衣物,某些衣服的透風程度很高,或者某些衣服在特定部位的擋風,造成身體冷熱不均衡,毛孔張開散熱之下,容易吹風受寒,造成流鼻水鼻塞,建議穿著適當的棉類衣服,可以實驗看看自己那些衣服特別容易過敏,就不要再穿

緊急處理:

  1. 運動,鼻塞真的嚴重的情況下,兩邊都塞住,嘴巴呼吸太勞累又容易口乾,建議做點仰臥起坐或伏地挺身,稍微舒緩一下,趁機趕緊睡覺
  2. 側躺,兩邊都塞的情況下,折衷作法就是側傾一邊,至少讓一個鼻孔能呼吸,才有辦法睡覺
  3. 按壓穴道,鼻塞不嚴重的情況下,按壓鼻孔左右兩側外面凹槽,也就是所謂的迎香穴,稍微會有點作用

 

效果比較

  • 長期:

    • 環境>運動>早睡早起>衣物
  • 緊急處理:

    • 運動>側躺>按壓穴道(一堆醫生及網路教學,但其實最無效)

 

誤刪google chrome書籤該怎麼辦? 教你救回!

•十一月 16, 2013 • 1 則迴響

不小心誤刪了書籤的情況很容易發生,作者在不同台電腦登入,由於匯入個人書籤,離開時打算刪除,忘記了尚未登出便把多年收藏許多重要的書籤都清空了!!!

刪除了沒關係,有個補救的方式,不過要盡快進行此動作。

 

chrome在下列位置:

C:\Users\(使用者名稱)\AppData\Local\Google\Chrome\User Data

(實例:C:\Users\adam0_000\AppData\Local\Google\Chrome\User Data)

放了兩個檔案,BookmarksBookmarks.bak,需要在User Data資料夾搜尋才搜尋的到

 

可以看見Bookmarks.bak檔案很大,猜測這是原本書籤的備份,根據網上看到的辦法是將原本的Bookmarks刪掉,Bookmarks.bak改為Bookmarks(怕危險可先將此兩個檔案先另外存起來),但作者親自實驗後發現無效,用Nodepad++看內容發現有檢查碼"checksum": “XXXXXXXXXXXXXXXXXXXXXXX",所以將原本的書籤內容從checksum之下的root開始到最後的version之前全部複製貼到Bookmarks儲存,重開chrome後即救回所有書籤。

 

 
%d 位部落客按了讚: