當我們有很多個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>
2012年11月23日 星期五
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>
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設的愈大愈好
這麼一來保證開啟時一定快很多(但不保證第一次一定很快)
訂閱:
文章 (Atom)














