星期三, 7月 20, 2011

20110720 Android 學習小記

Android
  • 必要開發工具
    • JDK5 或是  JDK6
    • Eclipse
      • Eclipse SDK  Version: 3.6.2
        這個部分可以搭配 http://portableapps.com
        java portable 來變成隨身版的開發工具
    • ADT
      • Android Development ToolKit
      • 在Eclipse內 Help --> Install New Software
    • SDK
      • Software Development Kit
        下載 SDK
        http://develop.android.com/sdk/index.html
        在 Eclipse 選單內 Window --> Preferences --> Android
        要先指定 SDK Location ( 就是 SDK 解壓縮後的位置)
        在 Eclipse 選單內 Window --> Android SDK and AVD Manager
        點選 Available packages 展開相關套件 然後安裝
        ( 例如 安裝 SDK Platform Android 2.3.3, API 10, revision 1)
        主要是以要開發的Android 版本為主, 勾選 SDK Tools, Platform-tool, Platform, Samples, and Google APIs
    • AVD
      • Android 虛擬機器 Android Virtual Device
        在 Eclipse 選單內 Window --> Android SDK and AVD Manager
        點選 Virtual devices
        點選 New 新增虛擬機器
        輸入虛擬機器的名稱於  Name: 欄位
        點選 Target: 標籤的下拉式選單, 選取 Android 機器的版本
        輸入  SD Card 的大小於 Size 欄位
        選取  虛擬機器畫面大小於  Built-in 下拉式選單
        在 Hardware 硬體的區域 可以點選 New 新增
        **SD Card support
        **Touch-screen support
        點選 "Create AVD" 建立虛擬機器
        測試:
        可以選取 AVD 後點選 Start  -->  Launch 測試
        AVD 目前還沒有找到設定儲存的地方
        所以如果是使用類似 Dropbox 這樣的機制同步Project
        在不同的機器, 要建立新的AVD
        可以使用 
        Ctrl + F12 切換螢幕方向
        Alt + Enter 切換全螢幕
        F6 切換軌跡球模式
  • 閱讀書籍
    • gasolin_Android2
  • Notes
    • Projects 專案
      • Windows SDK 建議可以參考
        android-sdk-windows\samples\android-10\ApiDemos
        相關 的寫法
        src 原始碼目錄(source)
        gen 自動生成目錄(Generate)
        • R.java
          • 自動產生, 不可以手動修改
          • 當改變專案的xml 或是其他資源的時候, 會自動更新修改 R.java
          • 包含資源的id 以及相關資源
        res 資源目錄(resource)
        • layout 版面配置
          • 預設是 main.xml
            • 透過 View 類別來顯示
              LinearLayout 線性版面配置
              • 一個一個元件, 由上而下排列下來
              • android:orientation 版面配置
                • android:orientation="vertical" 垂直編排
                • android:orientation="horizontal" 水平排列
              • android:layout_width 元件寬度
                • android:layout_width="fill_parent" 填滿上層元件
              • android:layout_height 元件長度
                • android:layout_height="fill_parent" 填滿上層元件
              TextView 文字檢視
              • 顯示文字到螢幕上面
              • android:layout_width 元件寬度
                • android:layout_width="fill_parent" 填滿上層元件
              • android:layout_height 元件長度
                • android:layout_height="wrap_content"  包住內容 
                  • 隨著文字內容的不同改變高度
              • android:text 顯示文字內容
          • 所以呼叫的方式是 R.layout.main
        • values 參數值目錄
          • 包含所有使用XML格式的參數值
        • drawable 圖片目錄
          • 包含所有圖片與圖示的相關資源
        AndroidMainfest.xml 功能清單
        • 指定執行的 activity
          如果有新增 Activity 類別的時候
          要先到這邊註冊才可以順利使用
    • 移除程式
      • adb  ( Android Debug Bridge)
        可以使用 adb shell
        #cd   data/app
        #rm  要移除的應用程式
    • 線上文件
    • 小技巧
      • 可以在 Eclipse 程式編輯的邊界上面
        按滑鼠右鍵
        勾選Show Line Numbers
        顯示行號
        可以在 Eclipse 上面輸入 Alt + /  會彈跳出輸入提示視窗

星期一, 7月 11, 2011

20110711 Android 練習小記

Lab1: TwoListener

package lab1;

import java.awt.*;
import java.awt.event.*;

public class TwoListener implements MouseMotionListener,MouseListener
{
Frame f1;
TextField tf;
public TwoListener()
{
f1 = new Frame("Two Listener");
tf = new TextField(50);
}
public void launch()
{
Label msg;
msg = new Label("click and Drag");
f1.add(msg,BorderLayout.NORTH);
f1.add(tf,BorderLayout.SOUTH);
f1.addMouseMotionListener(this);
f1.setSize(400,320);
f1.setVisible(true);
}
public static void main(String[] args) {
TwoListener t = new TwoListener();
t.launch();

}
public void mouseDragged(MouseEvent e1)
{
String s = "X:"+e1.getX()+"\tY:"+e1.getY();
tf.setText(s);
}
public void mouseEntered(MouseEvent e1)
{
tf.setText("Mouse has Entered");
}
public void mouseExited(MouseEvent e1)
{
tf.setText("Mouse has left");
}
public void mouseMoved(MouseEvent e1){}
public void mousePressed(MouseEvent e1){}
public void mouseClicked(MouseEvent e1){}
public void mouseReleased(MouseEvent e1){}

}


Notes:
AndroidManifest.xml
  • 可以設定 Android 程式預設要執行那個java檔案


Lab2: 建立一個 Android 專案, 測試滑鼠

有在 res.layout.main.xml 內先拖曳一個 Button

package com.MyBtnEvent;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class BtnEventPrjActivity extends Activity {
/** Called when the activity is first created. */
Button bt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bt=new Button(this);
//這邊 R.layout.main就是要使用 res.layout.main.xml 的樣板
setContentView(R.layout.main);
bt=(Button)findViewById(R.id.button1);
bt.setText("按下");
MyListener ml=new MyListener();
bt.setOnClickListener(ml);
}
}

class MyListener implements Button.OnClickListener{

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Button b=(Button)v;
b.setText("按鈕事件觸發");
}
}



Lab3: 使用匿名者類別來實作

package com.MyBtnEvent;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Btn3rdEvent extends Activity implements OnClickListener {
private Button bt;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bt=new Button(this);
setContentView(bt);
bt.setText("按下");
bt.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
bt.setText("按鈕事件觸發");
}
}



星期五, 7月 08, 2011

20110708 Android 學習小記

練習 java 視窗程式

package lab1;

import java.awt.*;


public class BorderExample {
//Frame 就是視窗, 是個容器
//這邊是物件變數
Frame f1;
//按鈕本身不是容器
Button bn,be,bw,bs,bc;
public BorderExample()
{
f1 = new Frame("Border Layout");
//建立一個按鈕內容為北方 North
bn = new Button("North");
be = new Button("East");
bw = new Button("West");
bs = new Button("South");
bc = new Button("Center");
}
public void launch()
{
f1.add(bn,BorderLayout.NORTH);
f1.add(be,BorderLayout.EAST);
f1.add(bs,BorderLayout.SOUTH);
f1.add(bw,BorderLayout.WEST);
f1.add(bc,BorderLayout.CENTER);
f1.setSize(320,200);
f1.setVisible(true);
}
public static void main(String[] args)
{
BorderExample ex1;
ex1 = new BorderExample();
ex1.launch();
}

}


補安裝 eclipse for android 的套件

以下安裝步驟引用 http://code.google.com/p/androidbmi/wiki/InstallAndroid


安裝 ADT 擴充套件

我們將在 Eclipse 上 安裝 Android 開發工具 (ADT)


Eclipse 3.5/3.6

找到螢幕上方的選單列, 選擇 「Help->Install New Softare」 選項,這選項會帶出一個新視窗。 選擇「Available Software」標籤,選擇右方的 「Add...(新增網站)按鈕,會彈出一個輸入框。
在輸入框中的"Location"欄位中輸入擴充套件的名稱(Name) ADT
跟網址(URL) http://dl-ssl.google.com/android/eclipse/site.xml 」,按下 "OK" 按鈕離開。Eclipse 會花一點時間尋找合適的版本。
在視窗中全選「 https://dl-ssl.google.com/android/eclipse/site.xml 」項目「Developer Tools」中的的選項後,按下右方的「Install」按鈕。
按下 「Next(下一步)鍵。照著步驟就安裝完成。安裝完會提示需重新啟動 Eclipse,按下 「Yes」 重新啟動。

下載 Android SDK
http://developer.android.com/sdk/index.html 下載 Android SDK
這次下載的是 r12 的版本
http://dl.google.com/android/android-sdk_r12-linux_x86.tgz
下載之後解壓縮
點選 Eclipse 內的 Window --> Perference --> Android
將解壓縮的路徑填進去 點選 OK



這個時候出現 沒有 Android SDK Platform-tool 的訊息
點選 Eclipse 內的 Window --> Android SDK and AVD Manger
點選 左邊的 Available Package
勾選要安裝的套件, 點選 Install Selected



Lab2: 單一按鈕
package lab1;

import java.awt.*;
import java.awt.event.*;

public class MyButtonEvt {
Frame f1;
Button bt1;
public MyButtonEvt()
{
f1 = new Frame("ButtonEvent");
bt1 = new Button("Click Me");
f1.add(bt1,BorderLayout.NORTH);
bt1.addActionListener(new ButtonEvt());
f1.setSize(200,200);
f1.setVisible(true);
}

public static void main(String[] args) {
MyButtonEvt b = new MyButtonEvt();

}
class ButtonEvt implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e1)
{
System.out.println("Button Click");
System.exit(0);
}

}

}






Lab3: 設定兩個按鈕



package lab2;

import java.awt.*;
import java.awt.event.*;

public class MyButtonEvt2 {
Frame f1;
//
Button bt1,bt2;
public MyButtonEvt2()
{
f1 = new Frame("ButtonEvent");
bt1 = new Button("BT1");
bt1.setName("BT1");
//
bt2 = new Button("BT2");
bt2.setName("BT2");
//
f1.add(bt2,BorderLayout.SOUTH);
bt2.addActionListener(new ButtonEvt());
f1.add(bt1,BorderLayout.NORTH);
bt1.addActionListener(new ButtonEvt());
f1.setSize(200,200);
f1.setVisible(true);
}

public static void main(String[] args) {
MyButtonEvt2 b = new MyButtonEvt2();

}
class ButtonEvt implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e1)
{
//這邊要記得轉型
Button b = (Button) e1.getSource();
if( b.getName().equals("BT1"))
{
System.out.println("Button 1 click");
}
else
{
System.out.println("Button 2 click");
}
}

}

}






Lab4:



package lab3;



import java.awt.*;
import java.awt.event.*;



public class AnonymousTest {
Frame f1;
TextField tf;

public AnonymousTest()
{
f1 = new Frame("Anonymous");
tf = new TextField("x:0;Y:0");
}

public void launch()
{
Label msg = new Label("Click & Drag");

f1.add(msg,BorderLayout.NORTH);
f1.add(tf,BorderLayout.SOUTH);

f1.addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e1)
{
String s = "x:"+e1.getX();
s+="Y:"+e1.getY();
tf.setText(s);
}
}
);

f1.setSize(320,240);
f1.setVisible(true);
}

public static void main(String[] args)
{
AnonymousTest a1;
a1 = new AnonymousTest();
a1.launch();

}
}

星期五, 7月 01, 2011

20110701 Java練習小記


import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;


public class Chapter16Homework1 extends Applet
{
public void paint(Graphics g)
{
g.setColor(Color.blue);
g.setFont(new Font("serif", Font.BOLD, 20));
g.drawString("Hello", 20,20);
}

}


import java.applet.Applet;
import java.awt.Graphics;


public class Chapter16Homework2 extends Applet
{
public void paint(Graphics g)
{
g.fillRect(10, 10, 100, 100);
}

}


import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;


public class Chapter16Homework3 extends Applet implements MouseListener
{
Image img;
int x = 10;
int y = 10;
public void init()
{
addMouseListener(this);
img = getImage(getDocumentBase(), "Image.gif");
}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e)
{
x = e.getX();
y = e.getY();
repaint();
}
public void mouseReleased(MouseEvent e){}
public void paint(Graphics g)
{
g.drawImage(img, x, y, this);
}

}


import java.applet.Applet;
import java.awt.Graphics;


public class Chapter16Homework5 extends Applet implements Runnable
{
int num;
int x;
public void init()
{
Thread th;
th = new Thread(this);
th.start();
}
public void run()
{
try{
for(int i=0; i < 10; i++)
{
num = i;
x = i * 10;
repaint();
Thread.sleep(1000);
}
}
catch(InterruptedException e)
{
}
}
public void paint(Graphics g)
{
String str = "是" + num;
g.drawString(str, x, 10);
}

}


import java.applet.Applet;
import java.awt.Graphics;


public class Chapter16Homework5 extends Applet implements Runnable
{
int num;
int x;
public void init()
{
Thread th;
th = new Thread(this);
th.start();
}
public void run()
{
try{
for(int i=0; i < 10; i++)
{
num = i;
x = i * 10;
repaint();
Thread.sleep(1000);
}
}
catch(InterruptedException e)
{
}
}
public void paint(Graphics g)
{
String str = "是" + num;
g.drawString(str, x, 10);
}

}