今天來寫點跟介面有關的ʕ→ᴥ←ʔ
我們在開始學Android程式設計的時候,老師第一步大概會叫你在xml的檔案裡面拉一個TextView,然後命名HelloWorld吧
然後從此踏上了程式的不歸路(╥_╥)
我咧~其實寫著寫著寫到後來
就會去思考這些UI元件是怎麼來的
後來學會使用canves之後,就大致了解了
不過後來又有個疑問: 這些元件在更早之前應該都是用程式碼一點一滴地摳出來的吧
那麼他如果要在java被使用,那我又該如何設置呢?
後來程式中漸漸開始有很多需要靈活變化的需求後,好像有時候也需要有能在程式中寫元件的能力了
於是想著想著就寫了這篇XD
事不宜遲,看一下範例吧
這次沒有Github,要程式的私我我會給
來吧!
1. 咦?(゜ロ゜)
咦?版主你放錯了吧?
我並沒有搞錯範例哦(・ωー)~☆
因為範例中所有的元件都是用java完成的(包括控制)
來看一下設計檔案
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/parent" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"/>
見ろ!~真白だ!
不過在粉底白字的部分,我還是有給這個佈局ID
因為稍後的所有元件都是要寫在這裡面的
Okay,速速講重點吧
2. 撰寫程式
我的習慣一直都是直接給你範例程式抄
那麼一樣,我直接PO全部,再來講解
MainActivity.java
public class MainActivity extends AppCompatActivity { ConstraintLayout parentLayout; int GUIDELINE_ID = 100, SWITCH_ID = 101, TEXTVIEW_ID = 102, EDITTEXT_ID = 103, BUTTON_ID = 104; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /**令畫面中的ConstraintLayout為盛載UI們的容器*/ parentLayout = findViewById(R.id.parent); initView(); useView(); } private void initView(){ /**設置中間橫線*/ //new一個UI Guideline guideline = new Guideline(this); //賦予此元件ID guideline.setId(GUIDELINE_ID); //設置此物件之佈局 ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT ); lp.orientation = ConstraintLayout.LayoutParams.HORIZONTAL; //將佈局套入元件本身 guideline.setLayoutParams(lp); //(Guideline特有)設置畫面切割佔比率 guideline.setGuidelinePercent(0.5f); //將UI放進容器內 parentLayout.addView(guideline); /**設置Switch Button*/ @SuppressLint("UseSwitchCompatOrMaterialCode") //new一個UI Switch swButton = new Switch(this); //賦予此元件ID swButton.setId(SWITCH_ID); //設置此物件之佈局 ConstraintLayout.LayoutParams swLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); swLayout.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; swLayout.bottomToBottom = guideline.getId(); swLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; swLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; //將佈局套入元件本身 swButton.setLayoutParams(swLayout); //(swButton特有)設置文字 swButton.setText("放爽的"); //將UI放進容器內 parentLayout.addView(swButton); /**設置TextView*/ TextView textView = new TextView(this); textView.setId(TEXTVIEW_ID); ConstraintLayout.LayoutParams tvLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); tvLayout.topToTop = guideline.getId(); tvLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; tvLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; textView.setLayoutParams(tvLayout); textView.setText("Hello!"); textView.setTextSize(22); textView.setTextColor(Color.BLACK); parentLayout.addView(textView); /**設置EditText*/ EditText editText = new EditText(this); editText.setId(EDITTEXT_ID); ConstraintLayout.LayoutParams edLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.MATCH_PARENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); edLayout.topToBottom = textView.getId(); edLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; edLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; edLayout.topMargin = dpToPx(24); edLayout.rightMargin = dpToPx(32); edLayout.leftMargin = dpToPx(32); editText.setLayoutParams(edLayout); parentLayout.addView(editText); /**設置Button*/ Button button = new Button(this); button.setId(BUTTON_ID); ConstraintLayout.LayoutParams btLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); btLayout.topToBottom = editText.getId(); btLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; btLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; btLayout.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID; button.setLayoutParams(btLayout); button.setText("確定"); parentLayout.addView(button); } /**將DP轉為像素單位*/ private int dpToPx(int dp) { return (int) (dp * Resources.getSystem().getDisplayMetrics().density); } private void useView(){ TextView tvShow = parentLayout.findViewById(TEXTVIEW_ID); EditText edInput = parentLayout.findViewById(EDITTEXT_ID); Button btOK = parentLayout.findViewById(BUTTON_ID); btOK.setOnClickListener(v->{ String s = edInput.getText().toString(); tvShow.setText(s); }); } }
好,程式抄完的出口在右上角,慢走不送(^_^)/
欸不對!還是看一下啦!霸偷霸偷
總之我們先從全域變數來看
ConstraintLayout parentLayout; int GUIDELINE_ID = 100, SWITCH_ID = 101, TEXTVIEW_ID = 102, EDITTEXT_ID = 103, BUTTON_ID = 104;
上面的是要把UI放進去的容器
而ID的部分就是在新增元件的時候,賦予他唯一的名稱
就跟我們常用的R.id.xxxx是一樣的道理
再來看向onCreate
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /**令畫面中的ConstraintLayout為盛載UI們的容器*/ parentLayout = findViewById(R.id.parent); initView(); useView(); }
我想了兩個副程式,initView就是初始化載入介面
也就是我們將要把UI設置寫在這裡
useView則是使用這些UI元件
OK,來看initView()吧
首先是這些內容
private void initView(){ /**設置中間橫線*/ //new一個UI Guideline guideline = new Guideline(this); //賦予此元件ID guideline.setId(GUIDELINE_ID); //設置此物件之佈局 ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT ); lp.orientation = ConstraintLayout.LayoutParams.HORIZONTAL; //將佈局套入元件本身 guideline.setLayoutParams(lp); //(Guideline特有)設置畫面切割佔比率 guideline.setGuidelinePercent(0.5f); //將UI放進容器內 parentLayout.addView(guideline); /**設置Switch Button*/ @SuppressLint("UseSwitchCompatOrMaterialCode") //new一個UI Switch swButton = new Switch(this); //賦予此元件ID swButton.setId(SWITCH_ID); //設置此物件之佈局 ConstraintLayout.LayoutParams swLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); swLayout.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; swLayout.bottomToBottom = guideline.getId(); swLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; swLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; //將佈局套入元件本身 swButton.setLayoutParams(swLayout); //(swButton特有)設置文字 swButton.setText("放爽的"); //將UI放進容器內 parentLayout.addView(swButton); /**設置TextView*/ TextView textView = new TextView(this); textView.setId(TEXTVIEW_ID); ConstraintLayout.LayoutParams tvLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); tvLayout.topToTop = guideline.getId(); tvLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; tvLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; textView.setLayoutParams(tvLayout); textView.setText("Hello!"); textView.setTextSize(22); textView.setTextColor(Color.BLACK); parentLayout.addView(textView); /**設置EditText*/ EditText editText = new EditText(this); editText.setId(EDITTEXT_ID); ConstraintLayout.LayoutParams edLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.MATCH_PARENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); edLayout.topToBottom = textView.getId(); edLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; edLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; edLayout.topMargin = dpToPx(24); edLayout.rightMargin = dpToPx(32); edLayout.leftMargin = dpToPx(32); editText.setLayoutParams(edLayout); parentLayout.addView(editText); /**設置Button*/ Button button = new Button(this); button.setId(BUTTON_ID); ConstraintLayout.LayoutParams btLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); btLayout.topToBottom = editText.getId(); btLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; btLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; btLayout.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID; button.setLayoutParams(btLayout); button.setText("確定"); parentLayout.addView(button); } /**將DP轉為像素單位*/ private int dpToPx(int dp) { return (int) (dp * Resources.getSystem().getDisplayMetrics().density); }
嗚..吐血ヾ(´¬`)ノ
133行...我不想看了囧rz...
其實不會啦!我分解一下就知道其實都是一樣的東西再重複
首先我們來看其中一個元件...就拿Switch當範例吧
/**設置Switch Button*/ @SuppressLint("UseSwitchCompatOrMaterialCode") //new一個UI Switch swButton = new Switch(this); //賦予此元件ID swButton.setId(SWITCH_ID); //設置此物件之佈局 ConstraintLayout.LayoutParams swLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); swLayout.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; swLayout.bottomToBottom = guideline.getId(); swLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; swLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; //將佈局套入元件本身 swButton.setLayoutParams(swLayout); //(swButton特有)設置文字 swButton.setText("放爽的"); //將UI放進容器內 parentLayout.addView(swButton);
基本上,就是先新增一個Switch元件
再來賦予ID
然後寫他佈局需要的內容
最後在丟進主要容器中...就完成了!
那我們再拿另一個元件來比較一下
這邊是設置Button的部分
/**設置Button*/ Button button = new Button(this); button.setId(BUTTON_ID); ConstraintLayout.LayoutParams btLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT ,ConstraintLayout.LayoutParams.WRAP_CONTENT); btLayout.topToBottom = editText.getId(); btLayout.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; btLayout.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; btLayout.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID; button.setLayoutParams(btLayout); button.setText("確定"); parentLayout.addView(button);
可以比較一下上面的程式碼,再來看看這個
或許就會看得出一咪咪咪咪咪咪的蹊蹺哦:D
最後是使用這些UI元件
也就是useView()的這個部分
private void useView(){ TextView tvShow = parentLayout.findViewById(TEXTVIEW_ID); EditText edInput = parentLayout.findViewById(EDITTEXT_ID); Button btOK = parentLayout.findViewById(BUTTON_ID); btOK.setOnClickListener(v->{ String s = edInput.getText().toString(); tvShow.setText(s); }); }
這邊尤其要注意這裡
TextView tvShow = parentLayout.findViewById(TEXTVIEW_ID); EditText edInput = parentLayout.findViewById(EDITTEXT_ID); Button btOK = parentLayout.findViewById(BUTTON_ID);
因為這些元件是存在於最初的那個layout之中的,因此他會是parentlayout.find...
這個部分可千萬不要漏掉囉!不然他就會嘿嘿給你看XD
三下五除二就寫完了,哈哈哈哈
這篇也算比較簡單的啦(-‿◦)
不過當初我在寫的時候,也是花了我一個下午研究的
好在網路很多人提供資料,雖然零零散散的
不過最後還是靠一堆資料完成了~
那本篇文章就寫到這邊
如果覺得文章有幫助的話...↓
頭臭(人 •͈ᴗ•͈) 我說不定是個gay啊(此處應有刪除線 ......開玩笑的₍₍ ◝( ゚∀ ゚ )◟ ⁾⁾ 阿勒我一直以為這個很女性化的英文名字可以向世人揭示窩4個貨真價實的雌性(・∀・) 原來我這些日子以來一直都是用兄弟的身份跟您交流啊?失敬失敬(? 哎呀雖然我是那2%的人類 但4!!!!! 窩也4 99%眼鏡仔的一員(推眼鏡(θ‿θ) 所以窩還是有身為程式設計師共通的特徵(挺胸<( ̄︶ ̄)> 不過話說回來我還真的是本部門唯二的女性XDDD (另一位不是寫程式的,是設計師( ╹▽╹ )) 我就是那位唯一一個女性然後程式還超爛這樣(? 喔後來我跟我男友當晚就和好了 所以這個buff效果只持續了一天,星期一大概就沒了(可惜? 不知道下次還有什麼事件可以隨機掉落這個buff( ꈍᴗꈍ)
頭臭XDDDDDD 對齁我這樣政治不正確,有辱台灣多元文化精神,安捏母湯ORZ 誒不對其實我在回文的時候我真的有去思考過你是不是...呃...彩虹系列的一員(??????) 有些同志不喜歡人家叫他Gay,阿有些Gay又不喜歡人家叫他同志,很難辦的啊喂(゜ロ゜) 你居然是咱們這偉大的行業中的女性同胞,真的有種很莫名的榮幸之至(??) 不過其實想一想寫安卓的女性好像比其他工程師偏多~這似乎也是事實 沒關係,雖然不是我們98趴肥宅的一員,但是是我們眼鏡的廣大群體之中的一份子XD 後來我去查Tilly這個名字還真的是女生在用的..哎呀英文不好在這裡暴露了 其實我倒是覺得你之前建議過我寫的東西都不算低水準的 所以我一直覺得你的程度應該沒有你想像的糟喔..我覺得啦 恭喜和好XD 雖然得到了Buff但是能不吵架得到Buff還是比較好的啊(;´д`)ゞ 不然來個物極必反,看看跟男友超級恩愛隔天會不會也有BUff好了XD
明日乾空氣移入,全台天氣穩定 氣溫方面北部14~21度 好天氣判斷會持續到週三,曉賢關心你~~
謝謝你~對每天長途通勤的我來說是個好消息呢!
天氣放晴了!非常棒。
沒錯:D
給你拍拍手,放煙火,耶~ 天氣回暖了,喜歡有陽光的天氣,開心^_^
沒錯~趁著假日我跑去陽台曬太陽了XD
程式碼真的很神奇,這篇很實用耶
哈哈連我也這麼覺得 感謝來訪ㄜ:D
來拍拍手~ 陽光真好!!!
沒錯~ 前幾天還特地去陽台曬太陽XDDDD
只能說彩虹世界真的蠻多采多姿的(? 不過我個人是會以Gay或蕾絲邊來代稱,如果禮貌一點我會說男同志或女同志(好像中國(共)上世紀用語喔哈哈(◔‿◔) 至於我的同性戀捧油則是會直接說他是同性戀這樣(超直接XD 沒啦我的程度也沒多好,我會知道那些也是因為工作上遇到XD有些是之前上課上到的(為了畢業 而且我也只剩概念了XD要我實作會很慘www 簡單來說我就是頭腦普通四肢又不發達(?)的人類 不過我不否認我蠻喜歡這種男多女少的環境(? 原因是因為跟男生一起工作問題比較少 不像女生之間還會在那邊勾心鬥角(演宮鬥劇嗎? 雖然我隔壁那位女前輩對我不錯啦 公司的女同事們也都對我很好 之前跟我同期進來但現在已經離職(?)的女性同仁也根本是天使 但是我以前大學被女性同學衝康太多次XDDD (就是那種我不爽但我不跟妳講我有錯但妳不能糾正我如果你點出來我就不爽)(不然就是我害羞我不上台???)<<<(乾男同學就不會有這些毛病 害我現在都有點女性恐懼症了(嗯? (認真拜讀這篇文) 喔喔喔原來android studio還可以直接用java寫元件喔XDD 我一直以為只能用拉的(孤陋寡聞ಠ∀ಠ 想當年上課我還被他的邏輯搞死(就是這個layout套這個,然後元件四邊的線一下要拉一下不拉,還有那個元件ID會各種搞混,我也常常因為把元件拉壞導致要整個重來XDDD) 想當年我還叫我男友幫我看我的作業到底為啥跑不出來,結果他幫我看了老半天(還一個字一個字檢查XD) 後來才抓到是某個元件的ID我設錯了 因為ID設錯而無法準時交作業的我:乾!(ノ`Д´)ノ彡┻━┻ (不要問我為啥明明有防呆有提示我還可以設錯,我TMD怎麼會知道QQ) (現在回頭看當年真的錯得很不可思議) 大概就4這樣,這就4我跟android studio的愛恨情仇XD 啊不過既然你都會用java寫元件了 要不要試試看Flutter啊~ 在Flutter的世界中大部分的元件就是完全靠程式碼控制,而且直接import就可以用了XDDD(慫恿(*´ω`*)
看來這裡成為你抬槓的小天地了,我覺得很蚌,殼以(・ω・)b 我身邊是還沒有同志朋友啦~當然也許有但我也不知道這樣 齁齁~男多女少的工作環境男生都碼會對女森各種溫良恭儉讓好不好(ㆆᴗㆆ) 不過都男生的確耍陰的比較少,尤其工程屍們又都是一堆直男(死ㄈㄓ),就算不爽回家尻一發就會忘記了 ...一發沒用就來兩發,恩(・ω・`)……….. 我高中跟大學都是工科,陽剛味最重的辣種電機科 不敢上台會被幹臭俗辣,有問題不講決明天問題就會解決你 反正都是這種環境啦~久了也習慣了 不過缺點是待久了會不知道怎麼跟女生講話就是了,很困擾的阿喂! 黑阿~這些元件都是那些Google的大老們一點一滴用程式敲出來的,本來就沒理由不能這樣用XD 你的那個問題齁...我跟你說 我以前也遇過啦(扶額)=3= 我那個時候剛學甚至還沒有Android studio 勒 ORZ 當時的介面更難拉,拉到後面很崩潰這樣 但4我看到一個重點了 有男女朋友真好啊QQQQQQQQQQQQQQQQQQQQQQQQ 我雖然不是至於母胎單身30歲時也沒有機會轉職魔法師了 但是我也單身好幾年了RRRRR 可惡羨慕XD 這時候應該要說男的也好不會OO嗎(ㆆᴗㆆ) 說到新的程式語言,哀~最近因為公司人手不足 所以現在也順手在寫電腦程式(C#)了 之前也認真想說要來學Swift 或 Flutter 不過光寫Android + PC. exe就快肝指數過高了冏 不過~ 想抄就說麻ʕ→ᴥ←ʔʕ→ᴥ←ʔʕ→ᴥ←ʔʕ→ᴥ←ʔ 為了我們業界的和平...我決定... 明天再努力(・∀・)(・∀・)(・∀・)(・∀・) P.s. 今天被同事搞得心情烏煙瘴氣,不過看到你的留言這麼ㄎㄧㄤ,地方碼農感到心情好:D
哈哈哈感謝有地方可以讓我開港(? 主要是我最近整個超閒 因為各種原因我上班都沒啥事情做(・∀・) 所以只好當一個廢物薪水小偷(~‾▿‾)~ 每天不是在裝忙,就是在裝忙的生活中度過[̲̅$̲̅(̲̅ ͡ಠ_ಠ)̲̅$̲̅] 可能是人類吃飽喝足閒閒沒事做的時候腦袋裡就會有一堆垃圾想法(? 所以我最近ㄎㄧㄤ到爆ヾ( ͝° ͜ʖ͡°)ノ♪ 我本人從小到大都是在男女五五開的班級 所以就比較沒那麼極端(? 但我其實也很害羞辣(。・//ε//・。) 雖然報告合作什麼的會很嫌棄,但我的朋友基本上還是99%都女的 所以我本人也不太會跟異性相處XDD(這4害羞ㄉ人類ㄉ通病ㄇ? 沒事兒沒事兒 我也當過20歲的魔法師 會脫單純屬意外(? 相信你未來會是搶手的黃金單身漢一枚( ◜‿◝ ) 啊反正緣份到了該來的就來了~ 或是你可以多去聯誼認識一下其他女森啊(??? 如果真的沒有女森,那你可以考慮男森,我相信會有好兒郎在等你的!!! 看到你如此的努力奮鬥 讓我也開始思考我484應該要利用現在的空閒時間來學點什麼XDD (看來是時候把android studio撿回來了嗎???) 最後,我支持你學習Swift 請產出簡單的作業給我抄(認真) 因為我看不懂網路上那些對於Swift的教學嗚嗚嗚༼;´༎ຶ ༎ຶ༽ (智商堪憂)
薪水小偷4你 你為什麼可以那麼閒~好好喔我也要 最近寫C#寫到死去活來,還要幫前端工程師畫介面,幫後端工程師修改API 管出貨、管售後還要面對與老闆的會議還有來自客人的無腦問題 明明都快過年了還忙到快哭出來(*ノω<*) 才沒有辣個閒心情聯誼RRRR~你出賣一下你的姐妹還差不多ɷ◡ɷ 不過還好我們公司非常不鼓勵加班啦~因為公司=老闆家 員工不走老闆也沒辦法休息(´∀`) 講正經~會想努力也是有原因的啦 畢竟姑且是想要成為安著大師之類的 也有希望能夠當國際級的工程師,所以才努力學外語跟寫網誌 不過比起IOS應該會優先Flutter吧~不過都算是後續計畫了:D 畢竟Flutter的CP好像比較高XDDD
明天北部會全天都偏涼,中南部還是晴朗穩定的天氣 外出時依舊要留意空氣品質比較差 而開車的部友也要留意清晨濃霧對視線的影響 曉賢關心你~
謝謝您的關心:D
其實我這樣也不知道算好還是不好XD 可能是因為我太菜了所以我的主管除了APP之外並沒有給我其他工作 所以只要APP沒事做了(例如後台沒生出API、設計師沒給我畫面、專案沒給我需求)我就真的沒事做XD 雖然沒事做聽起來很好,但時間久了會有點恐慌XDDD 我還在猶豫要不要跟主管講(我有跟我的(上游?)前輩說我沒事做,但是他一臉無奈的表示她那邊也沒有新進度要我做XDD) 總而言之就是這樣,所以這兩天我會開始自學Swift(雖然學了我也沒辦法獨當一面XD) 喔很抱歉我身邊的好姐妹們都名花有主了XDD 她們還比我早脫單,我已經是姐妹群裡最晚脫單的了(嗚嗚嗚 不過如果沒時間去聯誼,你可以考慮一下你隔壁那位啊(??? 性別不是問題,至少你跟你隔壁那位有很多時間相處(?) 最後以我大約四個小時的Swift資深經驗 我也覺得Flutter比較好 寫一個就可以兩邊都用 再來就是Flutter只需要管程式碼就可以了 不用在那邊被拉介面這件事搞死XD (是的沒錯我那四個小時幾乎都在拉介面XD)
我也是偶爾會沒事做XD 之前我在專案跟專案的空白期間,我上班時間就開始刷LeetCode 我大概一週刷了快20題吧~真的是很有“意義”的一週 後來因為當了某個專案的專案經理 所以即使專案目前已經要投入到生產階段了,我偶爾還是得下去幫忙做該專案的硬體產品生產(就是焊接電路啦....) 趁著工作的空擋學習新技術我覺得非常殼以XD 之前也有一陣子在學Vue框架的網頁架設(可4我其實超討厭寫網站(;´д`)ゞ) 我自己是覺得,沒有什麼事情是比做中學還要快的 現在我會寫C#基本也是從工作中學的~所以想獨當一面的話試著寫一點Side-Project吧XD 哪泥(゜ロ゜)你們這些人生勝利組嗚嗚嗚 齁我隔壁的同事齁...呵呵呵(´Д`)ヾ 前幾天那個混蛋東西才搞砸我的一場簡報,還好我當時手上沒拿著兵器,不然我就要上頭條了(╯=▃=)╯︵┻━┻ 講交女友是講講啦,我算是很容易屈就對方的人;也就是我即使有生涯規劃也會被另一半影響而取消的那種 所以為了我接下來想做的事,目前是打算不交為佳(講得好像隨便就能交到女朋友一樣....) 拉介面對我來說也是很累人的事( ´_ゝ`) 要思考的太多了,什麼螢幕適配解析度問題一大堆快煩死 更何況我還兼任UI設計師,四個小時什麼的 哎呀,嫩โ๏∀๏ใ
真希望看著看著有一天也能看懂 😂 推+拍手拍滿
有事沒事來說不定哪天就取得第二技能囉XDD
真的非常的厲害,阿德先拍五下^^
謝謝:D
留言真的長xD(亂入
身為一個日日撰寫枯燥程式的Blogger而言 這也是令我相當驚訝的一件事啊...
我給你拍拍手~~
多蝦多蝦XD
真不錯,感覺很棒,這真是個不錯的分享
謝謝:D
對於會程式的人抱持崇拜 對我來說完全的外星文><
其實就跟各行各業一樣,熟能生巧而已XD
會寫程式真的很厲害耶,雖然看不懂,但由衷欽佩 來拍拍手
謝謝來訪拍手:D
看不懂 就是來拍拍手
好喔~謝謝