Android第三十五天

一、怎樣在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

相關文章
相關標籤/搜索