一、怎樣在MainActivity中爲Button的點擊事件綁定一個監聽器?(四種方式)
<1>a.查找控件
//查找控件按鈕
private Button button1;
button1 = (Button) findViewById(R.id.button1);
b.建立一個類,實現OnClickListener接口,重寫裏面的OnClick()方法
//OnClickListener()是按鈕的監聽器類對象,當按鈕被點擊的時候。
class MyListener implements OnClickListener{
//當按鈕被點擊的時候,會自動調用的方法
@Override
//v:事件源。被點擊的那個控件
public void OnClick(View v){
//這裏寫被點擊以後要執行的任務
button1.setText("點擊以後改變的文本內容"+new Date());
}
}
c.用查找到的控件去綁定監聽器對象。(按鈕對象.setOnClickListener(監聽器對象))
MyListener listener =new MyListener();
//綁定按鈕的被點擊的監聽器
button1.setOnClickListener(listener);
<2>a.查找控件
private Button button2;
button2=(Button) findViewById(R.id.button2);
b.讓當前類實現OnClickListener接口,重寫裏面的OnClick()方法
public class MainActivity extends Activity implements OnClickListener{
@Override
public void onClick(View v) {
//在這裏寫當按鈕被點擊以後要作的任務
......
}
}
c.用查找到的控件去綁定監聽器對象。(按鈕對象.setOnClickListener(this))
button2.setOnClickListener(this);
<3>a.查找控件
private Button button3;
button3=(Button)findViewById(R.id.button3);
b.用匿名內部類綁定監聽器
button3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//在這裏寫當按鈕被點擊以後要作的任務
......
}
});
<4>a.查找佈局
private LinearLayout layout;
layout=(LinearLayout)findViewById(R.id.layout);
b.在控件的屬性中聲明OnClick="方法名"
android:onClick="btnChange"
c.在java文件中寫一個方法
public void 方法名(View v){
//在這裏寫當按鈕被點擊以後要作的任務
......
}
總結:若是有多個按鈕綁定同一個監聽器,除了匿名內部類的寫法,其餘三種方法均可以。
二、怎麼實現多個按鈕綁定同一個監聽器?
<1>查找控件
private Button btn_showText;
provate Button btn_showLog;
btn_showText=(Button)findViewById(R.id.btn_showText);
btn_showLog=(Button)findViewById(R.id.btn_showLog);
<2>建立一個類,實現OnClickListener接口,重寫裏面的OnClick()方法
class BtnListener implements OnClickListener{
@Override
public void onClick(View v) {
//獲取事件源(被點擊的按鈕)的id
int id=v.getId();
switch(id){
case R.id.btn_showLog:
//這裏寫當點擊btn_showLog是要完成的任務
......
break;
case R.id.btn_showText:
//這裏寫當點擊btn_showText是要完成的任務
......
break;
....
}
}
<3>用查找到的控件去綁定同一個監聽器對象
BtnListener listener =new BtnListener();
//兩個按鈕綁定的監聽器對象爲同一個
btn_showText.setOnClickListener(listener);
btn_showLog.setOnClickListener(listener);
三、怎麼建立一個Activity?
<1>建立一個類,繼承Activity
public class SecondActivity extends Activity{}
<2>重寫onCreate()生命週期方法,而且在裏面調用setContentView()方法綁定要顯示的佈局文件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_second);
}
<3>在清單配置文件中註冊
<!-- 註冊activity 只須要寫一個必要的屬性name-->
<activity android:name="com.qf.day03buttondemo.SecondActivity">
<!-- intent-filter:表明當前的activity是第一個啓動的頁面 -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
四、sp、dp、dip、dpi、pt、px等單位的區別是什麼?
<1>dpi
dpi指像素密度。dots per inch ,即每英寸內像素點的個數。它不是表示長度的單位。在android中認爲:低(120dpi),中(160dpi),高(240dpi),超高(320dpi)。隨着技術的增加,實際dpi已經超出這個定義範圍。
<2>dip
device independent pixels ,即與設備無關的像素。目前這個單位已經被dp所取代,而不建議使用dip.
<3>dp
與dip概念同樣。不過dp已經取代了dip。在Android中用來表示非文字大小的尺寸。例如:外邊距、內填充等。
<4>sp
scale indepentdent pixel ,即與縮放比例無關的像素。在android中經常使用來表示文字大小。
<5>px
表示像素。由於一樣是200px,可是在不一樣手機下顯示的大小是不一樣的。
<6>pt
point磅。1磅=1/74英寸
總結:dp是用來定義非文字的尺寸,sp用來定義文字大小。px只用於產生一條一像素的分割線時使用。
五、一個適配器控件經過一個適配器展現數據的步驟。
<1>查找控件
private Spinner spinner;
spinner = (Spinner) findViewById(R.id.spinner);
<2>生成數據源
private ArrayList<String> data=new ArrayList<String>();
//初始化一個數據源鏈表
private void initData(){
數據內容
}
//調用數據源
initData();
<3>構造適配器對象
private ArrayAdapter<String> adapter;
adapter=new ArrayAdapter<String>(this,R.layout.item1);//兩參的構造方法
第一個參數:上下文對象
第二個參數:展現數據的佈局文件
adapter=new ArrayAdapter<String>(this,R.layout.item1,data);//三參的構造方法
第一個參數:上下文對象
第二個參數:展現數據的佈局文件
第三個參數:數據源(能夠是鏈表,也能夠是數組)
adapter =new ArrayAdapter<String>(this,R.layout.item2,R.id.textView,data);//四參的構造方法
第一個參數:上下文對象
第二個參數:展現數據的佈局文件(不是以TextView做爲根節點)
第三個參數:item2中要展現數據的TextView控件的id
第四個參數:數據源
adapter = new SimpleAdapter(this,data,R.layout.item,new String[]{"name","age","icon"},new int[]{R.id.name,R.id.age,R.id.icon})
第一個參數:上下文對象
第二個參數:數據源
第三個參數:展現數據的佈局文件
第四個參數:map存儲的key值
第五個參數:要對應的value值的控件id
<4>把數據和適配器產生聯繫(三參、四參的構造方法在構造適配器時就產生聯繫)
adapter.add("data1");//添加一條數據
adapter.addAll(data);//添加一個鏈表數據
<5>把適配器和控件綁定(控件.setAdapter(適配器))
spinner.setAdapter(adapter);
//當數據原發生了變化時,及時通知適配器更新
adapter.notifyDataSetChanged();
<6>spinner的選中其中一項數據時候的監聽器(OnItemSelectedListener)
須要重寫的方法是:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,long id) {
/*
parent:指發生選擇事件的適配器控件;
view:指代spinner裏面發生選擇事件的item的佈局視圖
position:發生選擇事件的item的位置信息(從0開始一次增長)
id:發生選擇事件的item的行號id
*/
//須要執行的邏輯代碼,以下例:
//把被點擊的視圖對象轉變成TextView對象
TextView TextView=(TextView) view;
String string=textView.getText().toString();
//獲取對應的spinner的位置上的展現信息
String string2=(String) parent.getItemAtPosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//須要執行的邏輯代碼
}
六、爲何將android:layout_weight屬性的值同時指定爲1就會平分屏幕寬度呢?
系統會先把LInearLayout下全部控件指定的layout_weight值相加,獲得一個總值,而後每個控件所佔大小的比例就是用該控件的layout_weight值除以剛纔算出的總值。
七、MVC開發模型
MVC(Model-View-Controller):M是指邏輯模型,V是指視圖模型,C則是控制器。一個邏輯模型能夠對於多種視圖模型,好比一批統計數據能夠分別用柱狀圖、餅圖來表示。一種視圖模型也能夠對於多種邏輯模型。使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可使用不一樣的表現形式,而C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新,與設計模式中的觀察者模式是徹底同樣。
MVC的好處:從用戶的角度出發,用戶能夠根據本身的需求。選擇本身合適的瀏覽數據的方式。好比說,對於一篇在線文檔,用戶能夠選擇以HTML網頁的方式閱讀,也能夠選擇以PDF的方式閱讀。從開發者的角度,MVC把應用程序的邏輯層與界面開發是徹底分開的,最大的好處是:界面設計人員能夠直接參與界面開發,程序員就能夠把精力放在邏輯層上。而不是像之前那樣,設計人員把全部的材料交給開發人員,由開發人員來實現界面。在Eclipse工具中開發Android採用了更加簡單的方法,設計人員在DroidDraw中設計界面,以XML方式保存,在Eclipse中直接打開就能夠看到設計人員設計的界面。
Android中界面部分也採用了當前比較流行的MVC框架,在Android中:
1)視圖層(View):通常採用XML文件進行界面的描述,使用的時候能夠很是方便的引入。固然,若是你對Android瞭解的比較多了的話,就必定能夠想到在Android中也可使用JavaScript+HTML等的方式做爲View層,固然這裏須要進行Java和JAvaScript之間的通訊,幸運的是,Android提供了它們之間很是方便的通訊實現。
2)控制層(Controller):Android的控制層的重任常落在了衆多的Activity的肩上,這句話暗示了不要在Activity中寫代碼,要經過Activity交割Model業務邏輯層處理,這樣作的另一個緣由是Android中的Activity的響應時間是5s,若是耗時的操做放在這裏,程序就很容易被回收掉。
3)模型層(Model):對數據庫的操做、對網絡等的操做都應該在Model裏面處理,固然對業務計算等操做也是必須放在該層的,就是應用程序中的二進制數據。
在Android SDK中的數據綁定,也都是採用了與MVC框架相似的方法來顯示數據。在控制層上將數據按照視圖模型的要求(也就是Adapter)封裝就能夠直接在視圖模型上顯示了,從而實現了數據綁定。好比顯示Cursor中全部數據的ListActivity,其視圖層就是一個ListView,將數據封裝爲ListAdapter,並傳遞給ListView,數據就在LIstView中實現。 java