2015年11月11日 星期三

Mac 安裝 Windows 8.1

近來要將一台mac air 與 一台 macbook pro 裝上windows, 結果折騰了好久,就是忘了一些步驟,將其主要步驟紀錄如下,各步驟詳細內容網路上都可找到,就不贅述了。

1. 準備windows的iso檔與一個隨身碟,應該8G的就夠了。
2. 在 osx下利用finder 執行應用程式/工具程式下的 bootcamp。
3. bootcamp會指示安裝windows的步驟,其中下載windows的支援程式部分要花蠻多時間的。
4. 裝好windows後,進入windows後會發現有些driver還沒裝(如 無線網卡),不要緊張,到控制台下找到bootcamp執行,即可裝好。如果要對觸控板做一些設定,也是在bootcamp裡面。

裝機結果發現 macbook 與 mac air都可用同一支bootcamp做出來的隨身碟內容,不必重做。當一台做好後,另一台在 osx下執行bootcamp時,前兩項(製作usb與下載windows支援程式)都可不必勾選了。

2015年10月29日 星期四

Mac 下使用 android studio 的 adb 指令

近來發現手上有不少Mac機器,想乾脆在Mac下裝Android studio。結果第一步就發現找不到adb。尋訪google大神後,發現以下方法:

1. 先將mac開機(按著 cmd+r) 進入recovery mode.
2. 選擇選單上的工具程式 / 終端機
3. 輸入 csrutil disable
4. 輸入 reboot 重開機
5. 正常進入系統後,進入終端機輸入:
   sudo cp ~/Library/Android/sdk/platform-tools/adb  /usr/bin/adb
6. 完工。

參考網址:
1. kiraku.tw/2014/12/3714/
2. http://stackoverflow.com/questions/32659348/operation-not-permitted-when-on-root-el-capitan-rootless-disabled 的回答。

2015年6月6日 星期六

L5: 元件的Onclick 處理事件

在 android的程式設計中,要處理 UI 元件的相關事件通常需要撰寫相關的listener,程式有一些嚇人。如果畫面中有一個button,其id是button,而我們希望使用者按下button時可以在畫面上顯示Hello,那我們需要寫出OnClickListener,步驟如下:
1. 加入button元件,確定其id為button

2. 到MainActivity.java的OnCreate裏以findViewById找到畫面中的button元件 (如何利用Android Studio幫你快速建立此行程式可以參見 L3: 使用 textView 當輸出)
3. 鍵入 bt.,畫面及如下所示,列出了可選項目,點選setOnClickListener
4. 在 bt.setOnClickListener()的一對小括號中間鍵入 new O (注意,要大寫O),就會出現OnClickListener的選項,如下圖。
點選OnClickListener的選項,神奇的事情發生了,Android Studio幫你完成了框架。
5. 剩下的事情就是在Onclick(View v) 內寫下你要做的事: 顯示 Hello。可以利用
    Toast.makeText來完成。因此在OnCreate外,先建立一個顯示訊息的副程式:

public void showmsg(String msg){
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}

然後在剛才的OnClick中呼叫 showmsg來顯示Hello即可。

    showmsg("Hello");

6. 完工。

其實以上步驟不難,只要善用Android Studio的 intellisense功能,就可少記憶很多東西。

Android Studio還有另外一個快速辦法,對於一些UI物件都可試試。步驟如下:

1. 建立Button元件,參考前述步驟 1。
2. 寫出onclick要呼叫的副程式,記得要傳入View v。
   public void xxx(View v) {
       Toast.makeText(this,"Hello",Toast.LENGTH_SHORT).show();
 }

3. 點選 button 元件,在其 Properties視窗中找尋 onClick,按下右邊的下拉選單,就可看到所建立的副程式 xxx,選擇此副程式。

4. 完工。

對於OnClick事件處理,這真是一個方便的做法,可惜Android Studio還沒有對其他事件提供相同的優待,期待後面的版本可以加入這樣的功能。目前對於其他事件(例如 OnCheckedChanged) 就只有繼續採取第一種作法了。

2015年6月5日 星期五

Short Note:快速產生 Override 方法

善用Android Studio 的協助,可以減少記憶一些固定的方法名稱及參數等。以覆寫固有的方法來說,可以用下述方法,快速建出基本的方法框架。

1. 以滑鼠點選要插入方法的位置。
2. 選擇功能表的 Code / Override Methods (如下圖)

3. 選擇所要的方法 (可複選)

4. 按下OK就完工了。




2015年5月20日 星期三

L4: 畫圖

想要在手機上畫個圖,說起來容易,可是似乎又有些摸不著頭緒。在這節中,將要達到一個簡單的目的: 在螢幕上顯示一個圓。單純的目的,讓我們可以一步步了解Android 畫圖的基礎。

1. 要自製一個View的類別(Class),首先在 app / java 下與 MainActivity 同一套件下產生一個新類別 PaintView (自訂名稱)。



按下OK後,會出現 public PaintView 的程式,將其改寫為 public PaintView extends View,然後如前面L3所說,當出現紅色底線毛毛蟲時,按下alt-Enter,讓Android Studio幫忙,選擇建立Constructor,就可得到下列程式。

public class PaintView extends View {
    public PaintView(Context context) {
        super(context);
    }
}

2. 為 PaintView 加上 onDraw方法的改寫,讓App在重繪 PaintView時,能畫出一個圓形。

public class PaintView extends View {
    public PaintView(Context context) {
        super(context);
    }
    protected void onDraw(Canvas canvas){
        Paint paint = new Paint();
        canvas.drawColor(Color.WHITE);  //設定畫布顏色
        paint.setColor(Color.BLACK);    //設定畫筆顏色
        canvas.drawCircle(100,100,50,paint); //在座標100,100處,以paint屬性畫出一個半徑50的圓
    }
}
PaintView 在這個例子中這樣就夠了,但是以後要再加功能,就要到這裡修改。

3. 為 App 畫面加上 PaintView這個CustomView。
如上圖選擇後,將它擺到畫面中即可。

4. 最後將 MainActivity.java中的onCreate 改寫如下即可。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main);    PaintView pp = new PaintView(this);
    setContentView(pp);
}

5. 完工。



2015年5月19日 星期二

L3: 使用 textView 當輸出

在C程式語言的學習過程中,常會用到 printf 來輸出結果,到了Android app的設計,要怎樣輸出結果到畫面上? 其實也有很多方法,利用元件當輸出也是一種方式。

本例使用 textView作為輸出元件,將 1 ~ 50 的整數顯示出來。

1. 利用前面所學,將 textView 擺到畫面中,為了讓 textView在超過螢幕範圍時,可以上下捲動,再加上一個 scrollView 做垂直方向的捲動,而textView應該放在 scrollView裡面,完成後架構如下:

2. 到 app / java 下找出 MainActivity.java 裡的 OnCreate 中加入程式就ok了 ,如下圖所示。


3. 解釋一下程式內容:

    TextView tt = (TextView) findViewById(R.id.textView);

這行可以找到畫面中放入的 textView 元件,程式撰寫時可以善用intellisense與alt-Enter的功能,減少記憶的負擔。以此行為例,先鍵入大寫 T,intellisense就會找到 TextView,選取按Enter就打好了,再輸入自訂變數名稱 (此例為tt),加上 = f,findViewById 又出現了,在()裏輸入 id.t,R.id.textView又出現了,最後在 )後補上一個分號 ;,此時整段下方出現紅色毛毛蟲底線,按下alt+Enter,選取第一項 cast to ...後按下Enter,本行就打好了。

   for (int i=0; i<50; i++)
       tt.setText(tt.getText()+"\n"+Integer.toString(i));

這段則是 for 迴圈的基本使用,不再贅述。而控制重複的指令中使用的方法如下:
         tt.setText(string) : 設定 tt 元件的顯示字串為 string
         tt.getText() : 取得 tt 元件的顯示字串
         "\n" : 換行字符
        Integer.toString(i) : 將變數 i 的內容轉換成字串。此例也可不需要使用此方法,直接寫 + i就好了,java可以自動轉換型態。

4. 要讓 scrollView寬度與畫面相同,就要設定其 layout:width 為 fill_parent。

5. 完工。

6. 試試下面的程式,也是程式設計課程中巢狀迴圈的常見範例。

tt.setText("");
for (int i=0; i<=5; i++) {
    for (int j=0; j<i; j++)
      tt.setText(tt.getText() + "*");
    tt.setText((tt.getText()+"\n"));
}

2015年5月18日 星期一

Fissler 26cm, 8l 壓力鍋

近來接獲高層指示,要添購一組德國Fissler的壓力鍋 !

經過百貨公司的初步調查後,6升的壓力鍋在母親節檔期,配合各項活動後,大約實際要NT$ 16000. 而網路大多建議可以經過德國代購來購買,也有建議可以找 Amazon。藉由Google大神的翻譯幫助,檢視了 amazon.it, amazon.de, amazon.fr 等歐洲 Amazon, 最後決定在 amazon.it下單,Fissler 8升的壓力鍋標價 149.xx 歐元,算起來很便宜,就給他下單了。


結帳時因為退稅,所以壓力鍋約為 122.xx 歐元,但是加上運費 54歐,台灣關稅 18.xx歐,一共要 194.xx歐,如果用信用卡付台幣,大約要 NT$ 7200,記得有網友提醒要指定付歐元較划算,所以指定付 194.xx歐元,後來信用卡傳來消費訊息,說我消費約 NT$ 6800,嗯,不可不慎 !

結帳時要輸入信用卡資料,到最後畫面才會出現總價,並且讓你選擇支付新台幣或歐元,運輸有兩個選項,一個是7-14天,一個是2-4天,但是運費一個是54.xx歐,一個則要8x.xx歐,還是選便宜的為上策。

下單時原先是選 7-14天到達,而訂單確認信上卻是估計12 ~ 24天,讓人有點擔心。隨後出貨通知信件中則改為 6天後到達。令人驚訝的是3天後就到了,這真是太神奇了。還好沒選2-4天的。

連外包裝有6.2kg,可是去掉外包裝,就只有5.5kg,這國際運費又多付了些...


拆箱後只有兩個物件:

沒有附贈腳架及蒸盤,看來下一次應該找網路代購業者,或許會有更低的價格,不過還是比百貨公司便宜的多,速度也真得很快,讓人不得不驚嘆這真是一個地球村的時代。