最近使用HTC Legend開發時,卻一直無法使用同步軟體,雖然將htc的軟體
全部移除後再安裝上去,可以同步,但是eclipse打開後又全部變成斷線
而無法連線,在eclipse上面雖然可以看到htc的裝置,但卻無法將apk安裝
一直出現下面的訊息:
Installation error: INSTALL_FAILED_CONTAINER_ERROR
Please check logcat output for more details.
Launch canceled!就算在裝置管理員上重新安裝不同的adb驅動程式,也都無法解決問題
後來在網站上找到一個解決方法,暫時可以在eclipse上將程式安裝
只是仍無法用htc sync連線,先暫時可以開發就好~其他的再慢慢處理了…
解決方法:
1、用usb線將手機與電腦連結,而連結的方式設為磁碟機
2、在手機sd卡中找尋 .android_secure的資料夾
3、找到smdl2tmp1.asec檔案,並且將它刪除(或先移到別的地方)
再使用eclipse來安裝程式,應該就可以了
2012年12月11日 星期二
2012年12月6日 星期四
Eclipse更新後出現錯誤(Incorrect line ending: found carriage return (\r) without corresponding newline (\n))
今天更新後,在xml出現這個錯誤
Incorrect line ending: found carriage return (\r) without corresponding newline (\n)
使用更新前的版本卻沒有出錯,後來找到了解決方法
原本的寫法
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/gradient_white"
android:orientation="vertical" >
後來改成
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/gradient_white"
android:orientation="vertical" >
這樣子就解決了,推測更新的版本要求每個xml指令,必須換行才能正確執行
另一種方法更有效,Ctrl+Shift+F 按下後,儲存即可
Incorrect line ending: found carriage return (\r) without corresponding newline (\n)
使用更新前的版本卻沒有出錯,後來找到了解決方法
原本的寫法
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/gradient_white"
android:orientation="vertical" >
後來改成
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/gradient_white"
android:orientation="vertical" >
這樣子就解決了,推測更新的版本要求每個xml指令,必須換行才能正確執行
另一種方法更有效,Ctrl+Shift+F 按下後,儲存即可
2012年11月23日 星期五
更換Activity為進入程式的第一個內容
當我們有很多個Activity時,要將某一個Activity設定第一個進入時
執行的內容,只要在AndroidManifest.xml中設定
如下面這個例子:
要將SecondActivity設為主要的Activity,只要將紅色的內容放進去就可以
但是,請注意,只能放在一個Activity中
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
</activity>
<activity android:name="SecondActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
執行的內容,只要在AndroidManifest.xml中設定
如下面這個例子:
要將SecondActivity設為主要的Activity,只要將紅色的內容放進去就可以
但是,請注意,只能放在一個Activity中
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
</activity>
<activity android:name="SecondActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
顏色的設定
當我們在設計時,可以有許多顏色的變化,而這邊有2種設定顏色的方式
將文字設為白色
TextView.setTextColor(Color.WHITE)
將文字設為綠色
TextView.setTextColor(Color.GREEN)
在 預設的顏色中會有12種可以選擇
(路徑:/res/values/color.xml)
在xml底下的程式如下
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="自訂名稱">#ARGB</color>
<color name="Red">#DC0300</color>
<color name="Pink">#3fFF19FC</color>
<color name="Black">#000000</color>
<color name="White">#ffffff</color>
</resources>
而在上面的例子中,總共有4種顏色的設定,
而顏色的設定由ARGB來變化
顏色的設定由A(透明)、R(紅色)、G(綠色)、B(藍色)
來設定,而它的數值由0~256,但是這裡必須用16進位
因此256=ff,而顏色的變化為8個數值
所以我們以黑色來看(沒有任何顏色):# 000000或#000
那為什麼這裡只有6個數值呢,因為它不透明,所以省略
也就是說如果你不用透明度,那你的顏色只要6個數值就好
而白色為#ffffff或#fff
如果要加上透明度,就如果上面的pink:#3fFF19FC
3f為它透明的程度,00是不透明,ff是完全透明
當我們設定xml之後,就可以在程式碼中加入設定的顏色
TextView.setTextColor(getResources().getColor(R.color.Pink))
第一種是android的預設顏色:
以Textview來看:將文字設為白色
TextView.setTextColor(Color.WHITE)
將文字設為綠色
TextView.setTextColor(Color.GREEN)
在 預設的顏色中會有12種可以選擇
而第二種為自訂顏色:
當我們自訂顏色時,要自訂一個color.xml放在/res/values下(路徑:/res/values/color.xml)
在xml底下的程式如下
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="自訂名稱">#ARGB</color>
<color name="Red">#DC0300</color>
<color name="Pink">#3fFF19FC</color>
<color name="Black">#000000</color>
<color name="White">#ffffff</color>
</resources>
而在上面的例子中,總共有4種顏色的設定,
而顏色的設定由ARGB來變化
顏色的設定由A(透明)、R(紅色)、G(綠色)、B(藍色)
來設定,而它的數值由0~256,但是這裡必須用16進位
因此256=ff,而顏色的變化為8個數值
所以我們以黑色來看(沒有任何顏色):# 000000或#000
那為什麼這裡只有6個數值呢,因為它不透明,所以省略
也就是說如果你不用透明度,那你的顏色只要6個數值就好
而白色為#ffffff或#fff
如果要加上透明度,就如果上面的pink:#3fFF19FC
3f為它透明的程度,00是不透明,ff是完全透明
當我們設定xml之後,就可以在程式碼中加入設定的顏色
TextView.setTextColor(getResources().getColor(R.color.Pink))
2012年11月16日 星期五
程式與界面連結
當我們建立一個專案,開始進來時android都會預設一些method()
而我們在規畫主程式時,執行的核心通常都在onCreate()之中
下面以一個簡單例子來說明,讓我們的程式能與我之前說明的layout產生關聯
程式源碼:
//這裡為你專案設定的名稱
package com.example.helloworld;
//將需要的method載入
import android.os.Bundle;
.
.
略
//宣告方式有public(公開)、private(個別)、protected(受限制的)
但主要或共用method一定要public
//extends代表繼承,在這裡我們設定的內容是個活動(activity)所以要繼承Activity
這樣子我們才能始用預設好的Activity方法
public class MainActivity extends Activity
{
//開始宣告一些變數,這些變數與誰連結、屬於那一類別、要做什麼功能
都與這些變數有關
//宣告tv1,tv2為TextView類別的變數
TextView tv1, tv2;
//宣告bt1為Button類別的變數
Button bt1;
//宣告lay1為View類別的變數(這個可用於控制layout)
View lay1;
//註解Override為覆載,也就是說執行這個method時一定要看父類別中是否有onCreate
這個函數,如果沒有則無法使用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 設定要顯示的內容視窗
setContentView(R.layout.activity_main);
// 指定tv1與介面的textview1連結
tv1 = (TextView) findViewById(R.id.textView1);
// 指定bt1與介面的button1連結
bt1 = (Button) findViewById(R.id.button1);
// 指定介面的layout與lay1連結
lay1 = (View) findViewById(R.id.lay1);
}
而我們在規畫主程式時,執行的核心通常都在onCreate()之中
下面以一個簡單例子來說明,讓我們的程式能與我之前說明的layout產生關聯
程式源碼:
//這裡為你專案設定的名稱
package com.example.helloworld;
//將需要的method載入
import android.os.Bundle;
.
.
略
//宣告方式有public(公開)、private(個別)、protected(受限制的)
但主要或共用method一定要public
//extends代表繼承,在這裡我們設定的內容是個活動(activity)所以要繼承Activity
這樣子我們才能始用預設好的Activity方法
public class MainActivity extends Activity
{
//開始宣告一些變數,這些變數與誰連結、屬於那一類別、要做什麼功能
都與這些變數有關
//宣告tv1,tv2為TextView類別的變數
TextView tv1, tv2;
//宣告bt1為Button類別的變數
Button bt1;
//宣告lay1為View類別的變數(這個可用於控制layout)
View lay1;
//註解Override為覆載,也就是說執行這個method時一定要看父類別中是否有onCreate
這個函數,如果沒有則無法使用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 設定要顯示的內容視窗
setContentView(R.layout.activity_main);
// 指定tv1與介面的textview1連結
tv1 = (TextView) findViewById(R.id.textView1);
// 指定bt1與介面的button1連結
bt1 = (Button) findViewById(R.id.button1);
// 指定介面的layout與lay1連結
lay1 = (View) findViewById(R.id.lay1);
}
監聽你的Button或界面(On Click)
當我們在程式中的變數與界面中連結後,在界面中的所有動作可以
適當的傳給程式,然後由程式去判斷要做什麼動作,但通常只會
做一次,除非我們有設定監聽器,才會針對每次的變化去做處理
最常見的是Button,它按下後我們會看見圖案的變化,但實際上,
每個物件都可以設變化
下面的例子將簡單說明監聽器的使用方法
//直接在這個活動中植入監聽器(implement OnClickListener)
public class MainActivity extends Activity implements OnClickListener {
TextView tv1, tv2;
Button bt1;
View lay1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.textView1);
bt1 = (Button) findViewById(R.id.button1);
/*
* this代表這個activity的內容 setOnClickListenr代表設定監聽器
* 而連結的監聽器已用implements內建在Activity之中
*/
//將bt1這個變數設監聽器,只要界面中與它連結的button被按下,就會反應
bt1.setOnClickListener(MainActivity.this);
//將tv1這個變數設監聽器,只要界面中與它連結的textview被按下,就會反應
tv1.setOnClickListener(this);
// 指定介面的layout與lay1連結,並設定監聽器Listener
lay1 = (View) findViewById(R.id.lay1);
lay1.setOnClickListener(this);
}
// 每個監聽器都必須有OnClick來指定後續的動作,View則代表所要監聽的視窗
public void onClick(View v) {
// if 如果符合條件,則做if裡面的動作,只做一次
//bt1==v表示如果視窗中按下的是button
if (bt1 == v) {
//文字的內容顯示為"TEST BUTTON", 而文字顏色為紅色
tv1.setText("TEST BUTTON");
tv1.setTextColor(Color.RED);
}
//tv1==v表示如果視窗按下的是texeview
if (tv1 == v) {
//文字的顏色為綠色,並且將string中的文字讀取出來
tv1.setText(R.string/TextViewShow);
tv1.setTextColor(Color.GREEN);
}
//lay1==v表示如果視窗按下的是layout而不是button或textview
if (lay1 == v) {
//文字的顏色為灰色,並且顯示的內容為"TEST VIEW"
tv1.setText("TEST VIEW");
tv1.setTextColor(Color.GRAY);
}
}
適當的傳給程式,然後由程式去判斷要做什麼動作,但通常只會
做一次,除非我們有設定監聽器,才會針對每次的變化去做處理
最常見的是Button,它按下後我們會看見圖案的變化,但實際上,
每個物件都可以設變化
下面的例子將簡單說明監聽器的使用方法
//直接在這個活動中植入監聽器(implement OnClickListener)
public class MainActivity extends Activity implements OnClickListener {
TextView tv1, tv2;
Button bt1;
View lay1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.textView1);
bt1 = (Button) findViewById(R.id.button1);
/*
* this代表這個activity的內容 setOnClickListenr代表設定監聽器
* 而連結的監聽器已用implements內建在Activity之中
*/
//將bt1這個變數設監聽器,只要界面中與它連結的button被按下,就會反應
bt1.setOnClickListener(MainActivity.this);
//將tv1這個變數設監聽器,只要界面中與它連結的textview被按下,就會反應
tv1.setOnClickListener(this);
// 指定介面的layout與lay1連結,並設定監聽器Listener
lay1 = (View) findViewById(R.id.lay1);
lay1.setOnClickListener(this);
}
// 每個監聽器都必須有OnClick來指定後續的動作,View則代表所要監聽的視窗
public void onClick(View v) {
// if 如果符合條件,則做if裡面的動作,只做一次
//bt1==v表示如果視窗中按下的是button
if (bt1 == v) {
//文字的內容顯示為"TEST BUTTON", 而文字顏色為紅色
tv1.setText("TEST BUTTON");
tv1.setTextColor(Color.RED);
}
//tv1==v表示如果視窗按下的是texeview
if (tv1 == v) {
//文字的顏色為綠色,並且將string中的文字讀取出來
tv1.setText(R.string/TextViewShow);
tv1.setTextColor(Color.GREEN);
}
//lay1==v表示如果視窗按下的是layout而不是button或textview
if (lay1 == v) {
//文字的顏色為灰色,並且顯示的內容為"TEST VIEW"
tv1.setText("TEST VIEW");
tv1.setTextColor(Color.GRAY);
}
}
Layout的基本設計
預設的專案中,android已給定一個Relative的界面
上面這個界面很簡單,而裡面包含了3個物件~layout、textview、button
由這個結構可看出RelativeLayout包含了2個物件TextView與Button在裡面
結構簡單表示:
<RelativeLayout
<TextView />
<Button />
/>
以下為它的xml源碼
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
(給定layout一個名稱lay1,而自訂id一定要用@+id/名稱)
android:id="@+id/lay1"
(設定它的寬度 match_parent表示符合父層的寬)
android:layout_width="match_parent"
(設定它的高度 match_parent表示符合父層的高)
android:layout_height="match_parent" >
<TextView
(給定textview一個名稱textView1,而自訂id一定要用@+id/名稱)
android:id="@+id/textView1"
(設定它的寬度 wrap_content表示符合輸入內容的寬)
android:layout_width="wrap_content"
(設定它的高度 wrap_content表示符合輸入內容的高)
android:layout_height="wrap_content"
(alignParentTop代表要以父層的最高處為參考線)
android:layout_alignParentTop="true"
(centerHorizontal代表是否要在水平的中央處)
android:layout_centerHorizontal="true"
(marginTop代表離上邊多遠處,48dp代表距離)
android:layout_marginTop="48dp"
(文字內容可直接寫入,要代入字串則用@string/字串名稱)
android:text="@string/TextView"
(文字的外觀:下面是android預設的字形(大的))
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<Button
(給定textview一個名稱Button1,而自訂id一定要用@+id/名稱)
android:id="@+id/button1"
(設定它的寬度 wrap_content表示符合輸入內容的寬)
android:layout_width="wrap_content"
(設定它的高度 match_parent表示符合父層的高)
android:layout_height="wrap_content"
(alignParentBottom代表要以父層的最底處為參考線)
android:layout_alignParentBottom="true"
(alignParentLeft代表要以父層的左邊為參考線)
android:layout_alignParentLeft="true"
(marginBottom表示要離底部多遠)
android:layout_marginBottom="136dp"
(marginLeft表示要離左邊多遠)
android:layout_marginLeft="37dp"
android:text="@string/Button"
/>
</RelativeLayout>
上面這個界面很簡單,而裡面包含了3個物件~layout、textview、button
由這個結構可看出RelativeLayout包含了2個物件TextView與Button在裡面
結構簡單表示:
<RelativeLayout
<TextView />
<Button />
/>
以下為它的xml源碼
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
(給定layout一個名稱lay1,而自訂id一定要用@+id/名稱)
android:id="@+id/lay1"
(設定它的寬度 match_parent表示符合父層的寬)
android:layout_width="match_parent"
(設定它的高度 match_parent表示符合父層的高)
android:layout_height="match_parent" >
<TextView
(給定textview一個名稱textView1,而自訂id一定要用@+id/名稱)
android:id="@+id/textView1"
(設定它的寬度 wrap_content表示符合輸入內容的寬)
android:layout_width="wrap_content"
(設定它的高度 wrap_content表示符合輸入內容的高)
android:layout_height="wrap_content"
(alignParentTop代表要以父層的最高處為參考線)
android:layout_alignParentTop="true"
(centerHorizontal代表是否要在水平的中央處)
android:layout_centerHorizontal="true"
(marginTop代表離上邊多遠處,48dp代表距離)
android:layout_marginTop="48dp"
(文字內容可直接寫入,要代入字串則用@string/字串名稱)
android:text="@string/TextView"
(文字的外觀:下面是android預設的字形(大的))
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<Button
(給定textview一個名稱Button1,而自訂id一定要用@+id/名稱)
android:id="@+id/button1"
(設定它的寬度 wrap_content表示符合輸入內容的寬)
android:layout_width="wrap_content"
(設定它的高度 match_parent表示符合父層的高)
android:layout_height="wrap_content"
(alignParentBottom代表要以父層的最底處為參考線)
android:layout_alignParentBottom="true"
(alignParentLeft代表要以父層的左邊為參考線)
android:layout_alignParentLeft="true"
(marginBottom表示要離底部多遠)
android:layout_marginBottom="136dp"
(marginLeft表示要離左邊多遠)
android:layout_marginLeft="37dp"
android:text="@string/Button"
/>
</RelativeLayout>
專案中的結構說明
src:主程式設計的放置處。在裡面會有package,
程式碼都放置在此
gen:最重要的位置,但我們不用去改(也不要亂改)
所有的設定變數,都會在R.java出現
assets:外部的資料、儲存都放置在此
libs:資料庫儲存的位置
res:大部份引用的資源都放置在這裡
drawable:圖片、背景顏色、特效都放在此處
android會預設hdpi、ldpi、mdpi、xldpi
這是預防有此圖片放大後會不好看,因此針對
不同的解析度,放置同名但不同畫質的圖片
layout:設計ui界面
menu:選單的放置處
values:裡面可放置color、string、style、theme
的設定, 現在android形成新專案後會預設
API11(values-v11)及API14(values-v14)的theme
AndroidManifest.xml是很重要的設定,如果這裡出錯
R.java的變數設定會出不來,則程式無法運行
所有的權限設定及多設定的Activiy及Service
都要在這裡寫入
在Eclipse中import一樣的Project
在Eclipse中要放入一樣的程式有幾個步驟,寫一下,怕下次又忘了
一、將原本的專案名稱改名
方法:在專案名稱中按右鍵,選Refator/Rename改成新名稱
例:Hello_World -->New_Name
這個時候就可以import另一個一模一樣的專案(但檔案放置的位置
要不一樣,也就是要有2個資料夾在)
二、import成功後有幾個地方要改
1、src裡面的package要改名稱
例:com.example.helloworld --> com.example.newname
2、AndroidManifest.xml裡面的名稱要改package
例: 找到原本的package名稱
com.example.helloworld改成新的com.example.newname
這樣子就可以使用一模一樣的專案了
補充:app name也要改否則apk中會有2個一模一樣的名稱出現
一、將原本的專案名稱改名
方法:在專案名稱中按右鍵,選Refator/Rename改成新名稱
例:Hello_World -->New_Name
這個時候就可以import另一個一模一樣的專案(但檔案放置的位置
要不一樣,也就是要有2個資料夾在)
二、import成功後有幾個地方要改
1、src裡面的package要改名稱
例:com.example.helloworld --> com.example.newname
2、AndroidManifest.xml裡面的名稱要改package
例: 找到原本的package名稱
com.example.helloworld改成新的com.example.newname
這樣子就可以使用一模一樣的專案了
補充:app name也要改否則apk中會有2個一模一樣的名稱出現
2012年11月14日 星期三
Eclips更新後找不到javaw的解決方法
一般來說,我們在安裝Eclipse的時候會將java的路徑同時設定好
但多數的時候,不用設定也能執行(偷懶時),結果這幾天更新後
就發現偷懶的後果了。
解決找不到java的方法
首先在我的電腦圖示中按右鍵進入/內容/進階
然後找到環境變數項目,將它點擊進入後
我們在環境變數中可以找到PATH這個變數,將它編輯
進入PATH編輯後,會發現它有許多連結路徑,而彼此間用分號間隔
此時找一下你的java路徑將它放入即可
例如我的java路徑:c:\Program Files\Java\jdk\bin
就將你的java路徑加到path中(記得要用分號隔開來
例如:c:windows\system32;c:windows;c:\Program Files\Java\jdk\bin
如此一來,Eclipse應該就正常運作了
但多數的時候,不用設定也能執行(偷懶時),結果這幾天更新後
就發現偷懶的後果了。
解決找不到java的方法
首先在我的電腦圖示中按右鍵進入/內容/進階
然後找到環境變數項目,將它點擊進入後
我們在環境變數中可以找到PATH這個變數,將它編輯
進入PATH編輯後,會發現它有許多連結路徑,而彼此間用分號間隔
此時找一下你的java路徑將它放入即可
例如我的java路徑:c:\Program Files\Java\jdk\bin
就將你的java路徑加到path中(記得要用分號隔開來
例如:c:windows\system32;c:windows;c:\Program Files\Java\jdk\bin
如此一來,Eclipse應該就正常運作了
2012年8月22日 星期三
在eclipse(java)中使用google app engine(GAE)
開始寫這篇文章時,距離我開始接觸google
app engine已經2個月左右了,
說來慚愧,因為一直無法成功登入google app engine 在使用eclipse的時候一直
登入失敗,像這個圖……
找了2個月一直在網路上找許多方法也看了google 本身的範例,就是無法登入
,最後終於找到方法!!!這個方法就是“重新安裝eclipse”,不過請注意我安
裝的軟體,不是安裝整個eclipse喔,只要找到Eclipse sdk的部份安裝就好(不要
跟原來的eclipse放在一起)~~這一點非常重要,下面將這2個月的過程詳細的記
下來,免得我下一台電腦又忘記如何安裝了.
這篇文章分4個部份來說明
1、需要的軟體及步驟
2、建立一個新專案
3、發佈專案
4、補充(google app engine的id設定)
需要的軟體及步驟
中執行程式)
上面這3個步驟完成後,基本上就可以開始來開發自已的google app engine了
Google app engine 範例
上面的步驟完成後,首先會看到下面的畫面,在右下角處登入你的google 帳號
登入後,開始輸入你的帳號、密碼:
登入成功,就會出現下面的訊息
此時就可以新建我們的專案guestbook:
按下New Web
Application Project(登入成功後,可以在右下角見到你的google
帳號)
輸入專案名稱與package名稱,然後勾選Use Google App Engine
(不選Use Google Web Toolkit)
完成後就可以看見一個新的專案已完成
發佈專案
新建專案順利後,就可以將此專案發佈到google app engine
這裡我們用Deploy to
App Engine這個選項
第一次進來時要設定id名稱(這個名稱必須與google app engine中所設定的名稱相同)
進來這個視窗後,在Application
ID輸入自已所設定的id名稱,按ok後就會上傳你
2012年7月9日 星期一
eclipse執行時出現(string.out.xml,main.out.xml)
更新到4.1的sdk及eclipse之後跟以前的用法總有些差別,不知道是編譯時
太聰明了,還是有bug= =~(實在弄不清楚)
不過很清楚的是新版的功能至少都要API11(也就是android3.0的平板才能用)
而更強的功能必須要API14(Android4.0)這也告訴我們,如果在後來的幾個月
之後,想要使用新的軟體,你可能手機要升級(或直接換新的了~)
咳~回到主題
要避免不要出現string.out.xml或是main.out.xml的方法,就是~不要在xml的檔案上按run(也就是不要在res資料夾內按run)最好在src的activity
上面按run(就是有.java的地方按)
為什麼要做這麼多餘的事= =(我還不知道為何要這麼做,而以前不需要這麼做)
2012年7月8日 星期日
eclipse更新到4.1無法寫新專案?
好不容易更新到4.1,搞好久的新界面設定,結果寫不了新專案- -~
一直叫我下載、叫我check(用了幾次還是不行)
這是個bug,一直叫我們更新version8,但下載version9@@
在你的sdk路徑下找\extras\android
在這個位址下有個資料夾compatibility
改成support就解決了……
一直叫我下載、叫我check(用了幾次還是不行)
這是個bug,一直叫我們更新version8,但下載version9@@
解決的方法:
找一下你的sdk-tools的位置在你的sdk路徑下找\extras\android
在這個位址下有個資料夾compatibility
改成support就解決了……
2012年7月6日 星期五
for、 while、 if、 switch 怎麼用?
還記得開始寫android的時候,因為不熟悉程式碼,看到這4個指令:
for、while、if、switch
的時候總是被這4種看似判斷又像迴圈的指令搞混(特別是if和while)。
的時候總是被這4種看似判斷又像迴圈的指令搞混(特別是if和while)。
到底何種時候用那種比較合適呢,其實看個人習慣,不過這四種指令
迴圈代表它會一直重覆動作,並不會跳出來或自動終止(除非已不符合它
迴圈的條件),所以在用迴圈時,一定要特別注意它的判斷條件,否則很
容易造成無窮迴圈的形成~
這四種指令我們可以分成兩類,一類是單純的判斷(if、switch),另一類就
是迴圈(for、while),這裡先從容易理解的開始說起
1、switch(判斷式)
基本上它是尋找符合的條件才跳進去
舉例來說:
switch(a) //
尋找a這個參數符合的條件
{
case 1: //a=1的動作
break;//中斷
case 2://a=2的動作
break;
case 3://a=3的動作
break;
default://預設的動作
break;
}
由上面這個範例我們可以看出,尋找a=1,a=2,a=3及不符合
這些條件(default)時的動作,每個條件做完之後,我們都要再加上break(才會跳出switch,不然只會浪費資源往下繼續找其他符合的條
件,當然大多已不符合了),而我們用break的好處是我們只用switch
來做一次尋找並判斷,當找到我們要的之後,就可以跳開switch,繼
續往下一個動作去執行。
這些條件(default)時的動作,每個條件做完之後,我們都要再加上break(才會跳出switch,不然只會浪費資源往下繼續找其他符合的條
件,當然大多已不符合了),而我們用break的好處是我們只用switch
來做一次尋找並判斷,當找到我們要的之後,就可以跳開switch,繼
續往下一個動作去執行。
另外,我們用的參數是要以整數(int)來放,字串(string)不行放入switch。
2、for(有條件的迴圈)
for(初始變數;判斷式;遞增式)
舉例:
for(int i=0;i<3;i++)//給定初始整數i=0,當小於3時則開始這區塊內的動作
//當i=3的時候就停止
//當i=3的時候就停止
{
要執行的動作
}
以這個例子來看,它的動作會作3次(因為i從0、1、2)到i=3的時候,它就停了
3、if(判斷式)
舉例來說:
int i=0;
if(i<3)
{
i++;
}
這個結果會出現i=1(因為i=0,然後因為i++, i加了一次變成1)
請注意:這個過程你會覺得跟for的範例幾乎一樣,但結果就是不同!!
請注意:這個過程你會覺得跟for的範例幾乎一樣,但結果就是不同!!
4、while(迴圈)
跟上面的if用同樣的例子來比較
舉例:
i=0;
while(i<3)
{
i++;
}
這個結果會出現i=3(因為i=0,然後i++,一直加到i=3,迴圈共走3次)
請注意:這裡的範例跟for很像,也是迴圈,但是~它們出現的結果不太一樣
請注意:這裡的範例跟for很像,也是迴圈,但是~它們出現的結果不太一樣
如果你將i的結果show出來:
for :i=2(由0、1、2)
if :i=1(只加1次)
while :i=3(由1、2、3)
上面四種指令是常容易搞混的,因為很多時候它們是通用的(寫法不一樣
而已),所以在使用時先想清楚,要做判斷還是要做迴圈,這樣子在用時比
較不會出錯~
而已),所以在使用時先想清楚,要做判斷還是要做迴圈,這樣子在用時比
較不會出錯~
2012年7月5日 星期四
Eclipse無法更新!
今天要用很久沒開的筆電寫一些範例程式,結果進入Eclipse時提示我要更新,
卻發現我無法更新這些ADT?原來google將更新網址改變了,所以提醒一下自
已這個新網址https://dl-ssl.google.com/android/eclipse/,免得突然又找不到了@@
2012年7月1日 星期日
開發 android app(模擬器篇)
還記得當初開始學習開發android時,好不容易將eclipse安裝好 (當時,連安裝都有問題,這個問題初學者常發生,而且是看著市售的書照做時常發生的事,但相信現在這個問題已被解決了),然後很開心的照書抄了1個Hello Android的基本code(連這個都用1個個字母打出來的,就知道我多蠢了!!不對,應該說我很認真= =!),然後很快樂的設了2個模擬器,第1個還好(android2.1),大約等個10分鐘就出來了,第2個(android3.0)等不出來,然後我很用心的上網找,看見有人說他曾開了1天才出來,所以我就很放心的去睡,過了4小時真的出來了~然後第2次要開它,又再等個4小時(所以很久很久的時間,我沒用過android3.0),直到android4.0出來後,為了不想等1天開它(真的等1天,而且還開不出來)才發現了原因……模擬器的ram要設的愈大愈好(當然不能超過你的電腦負荷)
說了那麼多,回到主題~
Android 的模擬器,我們依據它的版本來看:
android 2.x.x的為手機專用
android 3.x.x為平板專用
android4.x.x則為手機、平板兩者適用
所以基本上在現在的開發都以4.x.x的模擬器來做比較好(如果電腦跑的動)
下面為sdk路徑的設定,以及模擬器設定的圖解
1、先從Windows/Preference設定sdk的路徑
2、進入Android設定sdk的路徑,此時你會看到能使用的API(要常常update才有新版本)
3、一旦sdk路徑好了之後,我們就能從Windows/AVD Manager設定模擬
以android4.0.3的設定來看
最後仍然建議初學時以android2.1 或2.2來使用就好
不論在我們怎麼設定模擬器,有2點一定要設定
1、Snapshot一定要勾選
2、Device ram
size設的愈大愈好
這麼一來保證開啟時一定快很多(但不保證第一次一定很快)
2012年6月25日 星期一
初學android必先了解的五大語法觀念
記得初學android時所看到一堆的程式碼,心中就在想,這麼多奇怪的函數要全記起來要花多久呀@@!什麼都不懂的我只好照書本寫的程式一個一個抄,每個語法一個一個去找解釋,然後抄原文解釋來看(結果抄完後,隔天也看不懂它代表什麼意思),一直苦練半年(抄了上百個程式)才對程式一知半解,也才發現自已浪費了許多時間背程式碼、抄程式碼(程式碼的背誦不是android要我們去學的,還有更多重要的內容學習),為了不讓想學android的初學者跟我走一樣浪費時間的路,下面幾個重要觀念一定要先記起來,才不會耗費不必要的時間。
一、口語化的函數或指令
在android生命周期中有onCreate、onPause、onDestory…等等
由這些函數可知道其中所代表的意思或做法:onCreate(創建期間)、onPause(暫停期間)
onDestory(毀滅期間),許多預設的函數,它的字義就是如此,所以如果你看到很長的函數或指令,拆開來看就能了解它的意思,比如:StartActivityForResult,
你可以拆成Start
Activity For Result,這代表依照不同結果來開始一個活動。
在android程式設計中,空白代表一個程式碼或一個定義的結束,所以我們在命名或定義時才會將名稱連在一起而不留空白。
二、函數的執行
android是一種物件導向,也就是說每個函數、每個動作、每個元素都可當作一個物件,在物件中又有許多不同的類別與執行動作,所以我們要讀取或執行物件中的函數或動作時,都用“.”來執行所要的指令。
例如:Button.onClickListenr() ,這代表是在Button類別中執行on click listener(按下的監聽器)
三、大、小寫的差別
如果常接觸java,有時候會覺得是不是自已寫錯程式碼了(大小寫不同),但這些程式碼卻偏偏可以執行而沒有出現錯誤?
其實這些大小寫的意義不相同,但常常會混淆,例如:int,Integer ; double,Double ; float,Float,這些看似相同,但其實有它的意義在(不然的話,開發程式者寫這種無聊的東西出來做啥)
小寫是基本類型,也就是說它可以直接存數值。
小寫是基本類型,也就是說它可以直接存數值。
例如:int i=1(定義 i 為整數1)
而大寫可以代表1個object(物件),
例如:Integer i=new Integer(1);(定義i為一個整數物件,而此物件為整數1)
而大寫可以代表1個object(物件),
例如:Integer i=new Integer(1);(定義i為一個整數物件,而此物件為整數1)
那為什麼要這麼麻煩的做法呢,因為當我們遇到某些函數,它的參數無法直接放入數值,只能放入物件,所以我們才必須把數值包在物件之中,例如:ArrayList、HashMap等函數…
四、父子關係
在函數中有許多類別,而這些類別中又分許多子類別出來,當我們在使用函數時就
注意這些差別。通常每個類別只能有一個父類別,而在子類別中可以用“extends”來繼承父類別,繼承後可以擁有父類別的所有函數、變數。
例如:class test extends Activity{}:這代表我們新建一個test的class,而它繼承了父類別Activity的所有函數、變數。所以當我們在test的class中使用onCreate(){super.onCreate();}
這代表我們可以用“super”這個方法來讀取父類別中onCreate()的功能。
五、變數
在很多函數或方法中我們都必須代入參數,而這些參數的類型我們可以分為常用的幾種類型
1、Object:物件
2、String:字串
3、Value:數值(有int、 double、 float……不同的數值是不互通的)
這些變數彼此之間是無法直接通用,必須通過轉換才可以使用,所以在引用參數時,我們都必須清楚知道他們之間的關聯才可以,為什麼這邊要特別講變數呢?因為在android之中,我們常用R.java中的參數來代入,在R.java中的參數都是數字,但是它們可以代表物件、字串或數值,所以有時候引用時一旦沒注意,就會形成例外出錯…
Android的起源與認識
Android操作系統於2007年11月公開發表,它是由google與手機開放聯盟(Open
Handset Alliance, OHA)共同發展。在短短的5年之間,Android的系統不斷的開發更新,更新版本如
Cupcake 、
Donut 、 Eclair 、Froyo 、
Gingerbread 、
Honeycomb 以及
Ice Cream
Sandwich等等, 這些版本不斷地擴張手機所能支援的功能 ,甚至到了
匪夷所思的的地步。下面這張圖可以詳細說明每次版本更新所帶來的新功能。
在這邊我們先由軟體支援開始,Android系統中的應用程式框架,裡面有包含4個基本元件(活動、服務、廣播與內容提供)、資源管理、視窗這些都能以API的方式取得,然後建構出各式各樣的app,當然也有許多函式庫可以取得(這裡的函式庫是以C/C++建構),在google play上所有軟體都由應用程式框架與函式庫互相配合取用而創造出來~到這裡,好像創造出一個程式,感覺不會太困難~實際上真的不困難,因為google已經利用Android系統幫你取得了多數軟硬體設備的控制權(如:多媒體、藍芽、wifi、gps、3D、SQLite 、web…)而我們所需要做的就是熟讀文件並且將正確的參數代入即可得到我們要的效果。
可是這些功能apple、windows也能做到,而且apple做的也比android來的簡約、便利,為什麼還要學Android呢??相信這是許多人的疑問~我只學Andorid,沒寫apple(當然不是程式難學的關係),Android最大的特點在於開放!!!他不一定只能用在特定硬體,你可以自製硬體,然後與Android互相結合成你要的東西,看下面的影片你就知道它的威力在那!
相信由這兩部影片你可以發現,他們都是用手機去控制的(廢話!!!!),更正確的說法~他們是用android去控制的,這也就是我們要說的第2個部份,硬體支援~只要你想做自已的電子設備,用你的手機去控制硬體,那就用android~這是windows與apple所不容易做到的。
究竟Android是什麼呢?
它是移動操作設備系統,只要是移動設備的硬體,都可以用Android植入系統來達到所要的效果,而我們今日所見的移動設備大多以手機與平板為主,可是實際上它的功能會比我們想像的還要多很多…在這邊我們先由軟體支援開始,Android系統中的應用程式框架,裡面有包含4個基本元件(活動、服務、廣播與內容提供)、資源管理、視窗這些都能以API的方式取得,然後建構出各式各樣的app,當然也有許多函式庫可以取得(這裡的函式庫是以C/C++建構),在google play上所有軟體都由應用程式框架與函式庫互相配合取用而創造出來~到這裡,好像創造出一個程式,感覺不會太困難~實際上真的不困難,因為google已經利用Android系統幫你取得了多數軟硬體設備的控制權(如:多媒體、藍芽、wifi、gps、3D、SQLite 、web…)而我們所需要做的就是熟讀文件並且將正確的參數代入即可得到我們要的效果。
可是這些功能apple、windows也能做到,而且apple做的也比android來的簡約、便利,為什麼還要學Android呢??相信這是許多人的疑問~我只學Andorid,沒寫apple(當然不是程式難學的關係),Android最大的特點在於開放!!!他不一定只能用在特定硬體,你可以自製硬體,然後與Android互相結合成你要的東西,看下面的影片你就知道它的威力在那!
相信由這兩部影片你可以發現,他們都是用手機去控制的(廢話!!!!),更正確的說法~他們是用android去控制的,這也就是我們要說的第2個部份,硬體支援~只要你想做自已的電子設備,用你的手機去控制硬體,那就用android~這是windows與apple所不容易做到的。
2012年6月19日 星期二
開始你的android app(安裝篇)
記得開始寫android之前,安裝需要的環境(java、eclipse及android sdk還有開啟它的模擬器)時,等待的時間有夠漫長,長到令人狂打瞌睡(自已的電腦等級不夠,又不能打電玩只能看看網誌、新聞,一直等待並打哈欠…)整個過程花費約2個小時左右,所以請耐心依以下步驟安裝並更新。
下載android sdk 並且執行模擬器的詳細介紹
整個更新過程至少要3小時以上,請耐心等待,而模擬器的開啟,建議先用android2.1
一開始會比較快速,如果用android4.0以上,要確定你的電腦ram至少2G,否則不建議
使用andoid4.0以上的模擬器。
1116補充:
尋找更新時,新增site: http://dl-ssl.google.com/android/eclipse
第一步:下載java jdk(這裡提供java下載網址,請找適合自已電腦的安裝)
下面為詳細步驟說明提供操作參考
第二步:安裝eclipse開發程式,並且設定其ADT(eclipse下載網址)
安裝詳細說明
第三步:下載android sdk並且設定模擬器
(這裡的步驟是最耗時的地方,下一篇會詳細介紹這部份的模擬器)
整個更新過程至少要3小時以上,請耐心等待,而模擬器的開啟,建議先用android2.1
一開始會比較快速,如果用android4.0以上,要確定你的電腦ram至少2G,否則不建議
使用andoid4.0以上的模擬器。
1116補充:
尋找更新時,新增site: http://dl-ssl.google.com/android/eclipse
訂閱:
文章 (Atom)