1. 程式人生 > >歸納總結Android的點擊事件

歸納總結Android的點擊事件

點擊事件

地址

http://blog.csdn.net/xiangyong_1521/article/details/78489254

目錄

  • 常見按鈕點擊

  • 點擊的其他方式

  • 對話框按鈕點擊

  • 列表點擊

  • 物理鍵點擊




1. 常見按鈕點擊

a、單擊事件,主要用於ButtonImageButton控件,布局視圖與TextViewImageView控件用的也比較多。相關類名與方法說明如下: 監聽器類名 : View.OnClickListener

設置監聽器的方法 : setOnClickListener

監聽器需要重寫的點擊方法 : onClick

findViewById(R.id.button).setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                           }        });

b、長按事件,較少使用,一般長按要麽彈出提示對話框,要麽彈出上下文菜單(上下文菜單只需註冊就好,無需額外處理長按事件)。相關類名與方法說明如下: 監聽器類名: View.OnLongClickListener

設置監聽器的方法 : setOnLongClickListener

監聽器需要重寫的點擊方法 : onLongClick

findViewById(R.id.button).setOnLongClickListener(new OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                return false;            }        });

c、組合按鈕點擊事件,一般用於CheckBox控件。相關類名與方法說明如下: 監聽器類名 : CompoundButton.OnCheckedChangeListener

設置監聽器的方法 : setOnCheckedChangeListener

監聽器需要重寫的點擊方法 : onCheckedChanged

findViewById(R.id.button).setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {            }        });

d、單選按鈕點擊事件,只能用於RadioGroup視圖。相關類名與方法說明如下: 監聽器類名 : RadioGroup.OnCheckedChangeListener

設置監聽器的方法 : setOnCheckedChangeListener

監聽器需要重寫的點擊方法 : onCheckedChanged

findViewById(R.id.button).setOnCheckedChangeListener(new OnCheckedChangeListener() {        @Override        public void onCheckedChanged(RadioGroup arg0, int checkedId) {            switch (checkedId) {                        }        }    };

2. 點擊的其他方式

onClick用於響應從按下到松開間隔時間較短的點擊事件,onLongClick用於響應從按下到松開間隔時間較長的點擊事件,間隔時間閾值大約在1-2秒之間。但不管是onClick還是onLongClick都要在松開後,才會調用相應的單擊或者長按函數,而且不知道按下的是什麽鍵,所以有時不能滿足比較精細的事件要求。為此,View類還提供了幾個與點擊有關的監聽器,用來處理一些特殊場景。舉例如下:

a、觸摸事件,從用戶按下屏幕就開始響應,直到用戶松開才終止響應,期間可處理按下、移動、松開等動作。相關類名與方法說明如下: 監聽器類名 : OnTouchListener

設置監聽器的方法 : setOnTouchListener

監聽器需要重寫的點擊方法 : onTouch

findViewById(R.id.button).setOnTouchListener(new OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                switch (event.getAction()) {                case MotionEvent.ACTION_DOWN://按下                    break;                case MotionEvent.ACTION_UP://擡起                    break;                case MotionEvent.ACTION_MOVE://表示按下後移動了手指                    break;                }                return false;            }        });

b、鍵盤事件,該事件比觸摸事件更進一步,不但在觸摸時全程響應,還能獲知當前按下的是哪個鍵。相關類名與方法說明如下: 監聽器類名 : OnKeyListener

設置監聽器的方法 : setOnKeyListener

監聽器需要重寫的點擊方法 : onKey

findViewById(R.id.button).setOnKeyListener(new OnKeyListener() {            @Override            public boolean onKey(View v, int keyCode, KeyEvent event) {                switch (event.getAction()) {                     case KeyEvent.ACTION_UP:             //鍵盤松開                         Toast.makeText(SQLiteActivity.this, ""+keyCode, 0).show();                       break;                   case KeyEvent.ACTION_DOWN:          //鍵盤按下                         break;                  }                return false;            }        });

c、焦點變化事件,主要用於EditText控件。比如屏幕上有多個EditText輸入框,當用戶點擊某個輸入框,則該輸入框獲得焦點;然後用戶再點擊另一個輸入框,則原輸入框失去焦點,當前輸入框獲得焦點;所有獲得焦點與失去焦點的控件,都有條件響應焦點變化事件。相關類名與方法說明如下: 監聽器類名 : OnFocusChangeListener

設置監聽器的方法 : setOnFocusChangeListener

監聽器需要重寫的點擊方法 : onFocusChange

findViewById(R.id.button1).setOnFocusChangeListener(new OnFocusChangeListener() {            @Override            public void onFocusChange(View v, boolean hasFocus) {                 Toast.makeText(SQLiteActivity.this, "1:"+hasFocus, 0).show();            }        });        findViewById(R.id.button2).setOnFocusChangeListener(new OnFocusChangeListener() {            @Override            public void onFocusChange(View v, boolean hasFocus) {                 Toast.makeText(SQLiteActivity.this, "2:"+hasFocus, 0).show();            }        });

3. 對話框按鈕點擊

對話框的點擊事件其實就是按鈕點擊,只是對話框上有多個按鈕,所以需要分別註冊監聽器,分別響應點擊事件。相關類名與方法說明如下: 監聽器類名 : DialogInterface.OnClickListener設置監聽器的方法包含了如下三個按鈕 : setPositiveButton : 設置肯定按鈕的監聽器,一般是確認

setNegativeButton : 設置否定按鈕的監聽器,一般是取消

setNeutralButton : 設置中性按鈕的監聽器,這個很少用 監聽器需要重寫的點擊方法 : onClick

protected void dialog() {        AlertDialog.Builder builder = new Builder(getActivity());        builder.setMessage(getResources().getString(R.string.factory_reset_dlg_text));//樣式        builder.setPositiveButton(getResources().getString(R.string.other_ok), new DialogInterface.OnClickListener() {//確定            @Override            public void onClick(DialogInterface dialog, int which) {                dialog.dismiss();                resetFactory();            }        });        builder.setNegativeButton(getResources().getString(R.string.other_cancel), new DialogInterface.OnClickListener() {//取消            @Override            public void onClick(DialogInterface dialog, int which) {                dialog.dismiss();            }        });        builder.create().show();    }

4. 列表點擊

a、單項選擇事件,一般用於Spinner控件,在某個列表元素被選中時觸發。相關類名與方法說明如下: 監聽器類名 : AdapterView.OnItemSelectedListener

設置監聽器的方法 : setOnItemSelectedListener

監聽器需要重寫的點擊方法 :

onItemSelected : 列表項被選中時調用

onNothingSelected : 沒有選擇任何項時調用,該方法一般為空

 mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//選擇item的選擇點擊監聽事件                      public void onItemSelected(AdapterView<?> arg0, View arg1,                              int arg2, long arg3) {                          // TODO Auto-generated method stub                          // 將所選mySpinner 的值帶入myTextView 中                           myTextView.setText("您選擇的是:" + adapter.getItem(arg2));//文本說明                      }                      public void onNothingSelected(AdapterView<?> arg0) {                          // TODO Auto-generated method stub                          myTextView.setText("Nothing");                      }                  });

b、單項點擊事件,一般用於ListView控件和GridView控件,在某個元素被點擊時觸發。相關類名與方法說明如下:

監聽器類名 : AdapterView.OnItemClickListener

設置監聽器的方法 : setOnItemClickListener

監聽器需要重寫的點擊方法 : onItemClick

 /**     * 響應ListView中item的點擊事件     */     @Override    public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {         Toast.makeText(this, "listview的item被點擊了!,點擊的位置是-->" + position,                Toast.LENGTH_SHORT).show();    }

c、單項長按事件,一般用於ListView控件和GridView控件,在某個元素被長按時觸發。相關類名與方法說明如下:

監聽器類名 : AdapterView.OnItemLongClickListener

設置監聽器的方法 : setOnItemLongClickListener

監聽器需要重寫的點擊方法 : onItemLongClick

 /**     * 響應ListView中item的點擊事件     */     @Override    public void onItemLongClick(AdapterView<?> arg0, View v, int position, long id) {         Toast.makeText(this, "listview的item被點擊了!,點擊的位置是-->" + position,                Toast.LENGTH_SHORT).show();    }

4.2 導航項點擊a、下拉導航項的點擊事件,導航模式需設置為ActionBar.NAVIGATIONMODELIST,展現形式上很像Spinner,用於響應具體下拉項的選中事件。相關類名與方法說明如下: 監聽器類名 : ActionBar.OnNavigationListener

設置監聽器的方法 : setListNavigationCallbacks

監聽器需要重寫的點擊方法 : onNavigationItemSelected

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {      @Override      public boolean onNavigationItemSelected(MenuItem item) {          //在這裏處理item的點擊事件          return true;      }  });

b、標簽導航項的點擊事件,導航模式需設置為ActionBar.NAVIGATIONMODETABS,用於響應具體標簽頁的選中事件。相關類名與方法說明如下: 監聽器類名 : ActionBar.TabListener

設置監聽器的方法 : setTabListener

監聽器需要重寫的點擊方法 : onTabSelected : 在標簽頁選中時調用

onTabUnselected : 在標簽頁取消選中時調用,該方法一般為空onTabReselected : 在標簽頁在選中狀態下再次選中時調用,該方法一般為空

public class TabListener<T extends Fragment> implements ActionBar.TabListener {      private Fragment mFragment;      private final Activity mActivity;      private final String mTag;      private final Class<T> mClass;      public TabListener(Activity activity, String tag, Class<T> clz) {          mActivity = activity;          mTag = tag;          mClass = clz;      }      public void onTabSelected(Tab tab, FragmentTransaction ft) {          if (mFragment == null) {              mFragment = Fragment.instantiate(mActivity, mClass.getName());              ft.add(android.R.id.content, mFragment, mTag);          } else {              ft.attach(mFragment);          }      }      public void onTabUnselected(Tab tab, FragmentTransaction ft) {          if (mFragment != null) {              ft.detach(mFragment);          }      }      public void onTabReselected(Tab tab, FragmentTransaction ft) {      }  }

4.3 菜單項點擊菜單的點擊事件適用於選項菜單和上下文菜單的單項點擊,菜單無需註冊監聽器即可響應點擊事件,相關的點擊處理方法說明如下:onMenuItemSelected : 在菜單項選擇時調用,其內部做分支判斷,如果是選項菜單,則調用onOptionsItemSelected

如果是上下文菜單,則調用onContextItemSelectedonOptionsItemSelected : 在選項菜單的菜單項選中時調用。onContextItemSelected : 在上下文菜單的菜單項選中時調用。

@Override  public boolean onMenuItemSelected(int featureId, MenuItem item) {      return false;  }

5. 物理按鍵點擊

android手機除了位於中間的Home主頁鍵,還有左邊的菜單鍵,右邊的返回鍵按下菜單鍵,屏幕上彈出該頁的Menu菜單(如果有定義的話)。按下主頁鍵,屏幕回到桌面;長按主頁鍵,屏幕顯示進程列表。按下返回鍵,屏幕返回當前APP的上一頁面;如果當前APP已處於棧頂的主頁,則屏幕退出APP頁面並返回到桌面。

退出常見的提示方式不外乎兩種: 1、APP彈出一個確認對話框,讓用戶選擇是否退出APP,點擊“是”按鈕則退出,點擊“否”按鈕則取消; 2、APP彈出Toast提示“再按一次返回鍵退出”,如果用戶三秒之內接著又按了一次返回鍵,那麽APP再退出;

private long mTickForShow;    @Override    public void onBackPressed() {        if (SystemClock.uptimeMillis()-mTickForShow<3000) {            finish();        }else{            Toast.makeText(getApplication(), ""+getString(R.string.goout).toString(), 0).show();        }        mTickForShow=SystemClock.uptimeMillis();        }

筆記30 | 數據存儲之SQLite的介紹及使用

筆記29 | 整理Java的容器類

筆記28 | 學習一個簡單好用的下拉刷新、上拉加載控件

筆記27 | WindowManager實現懸浮窗口總結

筆記26 | 總結Android的獲取系統時間的幾種方法



結束



技術分享


歸納總結Android的點擊事件