AndroidWidget基礎知識

鴨脖發表於2012-07-14

AndroidWidget基礎知識

  1. 記得引入widget控制元件的包,importandroid.widget.*;

  2. 方法findViewById(R.id.*),該方法通過id標誌尋找控制元件,返回型別是View型別,View是所有控制元件的父類(就像MFCCWnd型別是所有控制元件的父類一樣),所以要強制轉換成對應控制元件的型別。

  3. TextView類,該類是靜態文字控制元件,有以下幾個方法:

setText(“”);設定控制元件中的文字的內容

  1. Button

setText(“”);設定控制元件上的文字的內容


voidsetOnClickListener(View.OnClickListener l)

Registera callback to be invoked when this view is clicked.

這個函式的作用就是設定按鈕被點選後的響應事件。


對於OnClickListener,它其實是view的一個內部類,這個內部類中只有一個共有的方法,那就是abstractvoid OnClick(View v),引數v是被點選的元件,函式內實現的是響應的事件。

  1. Intent

Intent是一種執行時繫結(runtimebinding)機制,它能在程式執行的過程中連線兩個不同的元件。通過Intent,你的程式可以向Android表達某種請求或者意願,Android會根據意願的內容選擇適當的元件來響應。

Anintent is an abstract description of an operation to beperformed.上面是androiddeveloper中對Intent類的描述,裡面還說,一個Intent物件就像各個activity之間的膠水一樣。在一個Intent物件中,包含以下資訊:

action

Thegeneral action to be performed

data 

Thedata to operate on

component 

Specifiesan explicit name of a component class to use for the intent

extras 

Thisis a Bundle(鍵值對,另一個activity裡面取資料的時候,就要用到key,找出對應的value ofany additional information

category 

 Givesadditional information about the action to execute.

type 

Specifiesan explicit type (a MIME type) of the intent data.

方法:

Intent setClass(Context packageContext, Class<?>cls)

Conveniencefor calling setComponent(ComponentName) withthe name returned by a Class object.

IntentputExtra(string,stirng);

該函式在extra資訊中存放一個鍵值對,另一個activity可以根據傳進來的鍵的值來確定value的值。


由上面我們可以看出,要想搞清楚setclass,必須先弄明白什麼是setcompoment

【注】context類的簡單解釋

Context字面意思上下文,位於frameworkpackageandroid.content.Context中,其實該類為LONG型,類似Win32中的Handle控制程式碼很多方法需要通過Context才能識別呼叫者的例項,比如說Toast的第一個引數就是Context一般在Activity中我們直接用this代替,代表呼叫者的例項為Activity,而到了一個buttononClick(Viewview)等方法時,我們用this時就會報錯,所以我們可能使用ActivityName.this來解決,主要原因是因為實現Context的類主要有Android特有的幾個模型,ActivityService以及BroadcastReceiver


IntentsetComponent(ComponentName component)

(Usuallyoptional) Explicitly set the component to handle the intent.

按照我的理解,setClass()函式只不過是setCompoment()函式換了一種形式罷了,他們的作用是相同的,都是設定intent物件中的copoment的資訊,指明Intent物件要使用的裝置名稱。正如androiddeveloper中隊setClass的解釋一樣,它“只是通過使用類物件返回的名字來更方便的呼叫setcompoment”


通過設定Intent物件設定來進行activity之間跳轉的基本思路:

我們的主要目的已經很明確了,那就是通過點選一個按鈕Button,來實現兩個Activity之間的跳轉。那麼這個Button的點選響應事件可以通過使用setOnClickListener()來實現,只是這個函式的引數是view.OnClickListener這個內部型別的,而且如果我們要實現我們想實現的事件,那就必須來重寫這個類中的onClickt()這個方法。我們可以通過implementsOnClickListener來建立一個新的類來實現我們要響應的事件。也就是說,我們現在每實現一個事件,都要讓OnClickListener生出一個孩子來,只有通過構造這個孩子類的物件,我們才能夠實現這個事件響應。

首先,我們來過載一下內部類的OnClick()這個方法。

classMyListener implements OnClickListener{

publicvoid onClick(View v){

Intentintent = new Intent();//建立一個Intent物件

Intent.setClass(Activity_1.this,Activity_2.class);//設定該intent要使用的裝置,由第二個引數返回

Activity_1.this.startActivity(intent);//事件的響應

}

}

實現了該類之後,我們便能夠實現事件的響應了

myButton.setOnClickListener(newMyListener());

以上便構成了按鈕事件響應的所有的程式碼。

【注】Activity物件的startActivity的方法

VoidstartActivities(Intent[] intents)

Launcha new activity.

Intent1.putExtra(“label”,”Yelnosh”)

Intentintent = getIntent();

Stringvalue = intent.getStringExtra("lable");

Intent也可用於activity與其他應用程式之間的通訊,比如下面的例子:

Uriuri = Uri.parse("smsto:18707192345");

Intentintent = newIntent(Intent.ACTION_SENDTO,uri);

intent.putExtra("sms_body","YelboshI love you!");

this.startActivity(intent);

這樣我們就不用在新建一個acitivity了,而是直接由本次的activity跳轉到發簡訊的介面,而且直接按傳送便可以了