導航:首頁 > 操作系統 > android組件點擊事件

android組件點擊事件

發布時間:2022-11-21 03:29:58

『壹』 android 一一 簡述Android四大組件

應用程序中,一個Activity就相當於手機屏幕,它是一種可以包含用戶界面的組件,主要用於和用戶進行交互。一個應用程序可以包含許多活動,比如事件的點擊,一般都會觸發一個新的Activity。

應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網路可用時)進行接收並做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它並獲取消息。

內容提供者主要用於在不同應用程序之間實現數據共享的功能,它提供了一套完整的機制,允許一個程序訪問另一個程序中的數據,同時還能保證被訪問數據的安全性。只有需要在多個應用程序間共享數據時才需要內容提供者。例如:通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處:統一數據訪問方式。

是Android中實現程序後台運行的解決方案,它非常適合去執行那些不需要和用戶交互而且還要長期運行的任務(一邊打電話,後台掛著QQ)。服務的運行不依賴於任何用戶界面,即使程序被切換到後台,或者用戶打開了另一個應用程序,服務扔然能夠保持正常運行,不過服務並不是運行在一個獨立的進程當中,而是依賴於創建服務時所在的應用程序進程。當某個應用程序進程被殺掉後,所有依賴於該進程的服務也會停止運行(正在聽音樂,然後把音樂程序退出)。

『貳』 Android中點擊事件功能實現示例

第一種點擊事件

在xml中設置onclick屬性

 android:onClick="myOnclick"

第二種;獲取Button然後一個一個單獨綁定點擊事件

http://schemas.android.com/apk/res/android"

    xmlns:tools=" http://schemas.android.com/tools "

    android:layout_width="match_parent"

    android:layout_height="match_parent"

   android:orientation="vertical" >

      < android:id="@+id/btn_imgBtn"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:onClick="myOnclick"

        android:text="imageButton"

        />

        <android:id="@+id/btn_imgView"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:onClick="myOnclick"

        android:text="imageView"

        />

public class MainActivity extends ActionBarActivity {

 private Button btnImageBtn;

 private Button btnImageView;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        btnImageBtn = (Button) findViewById(R.id.btn_imgBtn);

        btnImageView =  (Button) findViewById(R.id.btn_imgView);

 btnImageBtn.setOnClickListener(new OnClickListener() {

   @Override

   public void onClick(View v) {

    Toast.makeText(MainActivity.this, "點擊ImageButton", Toast.LENGTH_SHORT).show();

   }

  });

        btnImageView.setOnClickListener(new MyListener());

    }

第三種:寫一個類(MyListener)實現OnClickListener介面,然後Button在設置onclickListener的時候new一個MyListener

btnImageView.setOnClickListener(new MyListener());

 class MyListener implements OnClickListener{

  @Override

  public void onClick(View view) {

   switch (view.getId()) {

   case R.id.btn_imgBtn:

    Toast.makeText(MainActivity.this, "點擊ImageButton", Toast.LENGTH_SHORT).show();

    break;

         case R.id.btn_imgView:

          Toast.makeText(MainActivity.this, "點擊imageView", Toast.LENGTH_SHORT).show();

    break;

   } 

第四種:整個類(MianActivity)實現onclickListener的介面

跳轉界面

Intent:意圖,用於訪問android中的組件

用Intent跳轉界面(activity)

第一步:new一個Intent()

Intent intent1 = new Intent(MainActivity.this,ImageButtonActivity.class);

startActivity(intent1);

 public void myOnclick(View view){

     switch (view.getId()) {

  case R.id.btn_imgBtn:

   Intent intent1 = new Intent(MainActivity.this,ImageButtonActivity.class);

   startActivity(intent1);

   break;

        case R.id.btn_imgView:

         Intent intent2 = new Intent(MainActivity.this,ImageViewActivity.class);

   startActivity(intent2);

   break;

Intent intent = new Intent(當前的activity,跳轉到的acticvity.class);

startActivity(intent);

3.ImageView

展示方式:scaleType:

4.ImageButton:

觸摸事件:當控制項或者屏幕唄觸摸的時候,產生的反應

public boolean onTouchEvent(MotionEvent event) {



imageButton:現在已經唄button代替,用於展示圖片的按鈕。不能顯示文字。

imageView

scaleType:圖片展示的方式

 fitStart:展示在控制項的上方

 fitCenter:展示在控制項的中間

 fitEnd;展示在控制項的下方

 fitXY:不按照比例拉伸

 matrix:矩陣模式

matrix可以設置圖片旋轉,縮放。移動

獲取圖片的高度和寬度

int h = imgView.getDrawable().getIntrinsicHeight();

int w = imgView.getDrawable().getIntrinsicWidth();

 Matrix m = new Matrix();

m.postRotate(45);

m.postRotate(45, w/2, h/2);

imgView.setImageMatrix(m);

移動事件:

按下:MotionEvent.ACTION_DOWN

抬起:MotionEvent.ACTION_UP

移動:MotionEvent.ACTION_MOVE

獲取當前的移動事件,

event.getAction()

http://schemas.android.com/apk/res/android"

    xmlns:tools=" http://schemas.android.com/tools "

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    >

        android:id="@+id/img_01"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:src="@drawable/ss"

        android:scaleType="fitXY"/>

        android:id="@+id/img_02"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:src="@drawable/gl"

        android:visibility="gone"

        android:scaleType="fitXY"/>

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:src="@drawable/bird"

        android:layout_gravity="center"

        />

         android:layout_width="fill_parent"

         android:layout_height="wrap_content"

         android:textSize="20sp"

         android:textColor="#ff0000"

         android:gravity="center"

         android:text="小鳥飛"/>

public class MainActivity extends Activity {

 private ImageView img01;

 private ImageView img02;

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  img01 = (ImageView) findViewById(R.id.img_01);

  img02 = (ImageView) findViewById(R.id.img_02);

 }

 @Override

 public boolean onTouchEvent(MotionEvent event) {

  //System.out.println("被摸了");

  if(event.getAction()==MotionEvent.ACTION_UP){

   Log.v("TAG", "被抬起來");

   if(img01.getVisibility()==View.VISIBLE){

    img01.setVisibility(View.GONE);

    img02.setVisibility(View.VISIBLE);

   }else{

    img01.setVisibility(View.VISIBLE);

    img02.setVisibility(View.GONE);

   }

  }else if(event.getAction()==MotionEvent.ACTION_DOWN){

   Log.v("TAG", "被按下了");

  }else if(event.getAction()==MotionEvent.ACTION_MOVE){

   Log.v("TAG", "移動了");

  }

  return super.onTouchEvent(event);

 }

『叄』 如何在android studio里設置點擊監聽事件

Androidstudio 添加點擊監聽事件有三種方法:

一.匿名內部類

1.先找到那個控制項(初始化)

private Button bt1; //onCreate方法外

bt1 = (Button)findViewById(R.id.button1);

2.設置事件監聽器

bt1.setOnClickListener(new OnClickListener(){

public void onClick(View v){

System.out.println("我的按鈕被點擊了");

}

});

(3)android組件點擊事件擴展閱讀:

如果按鈕綁了監聽器

按鈕點擊是通過OnClickListener來實現的

大致的流程應該是這樣的

public class MainActivity extends Activity

{

private Button loginButton;

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//創建監聽器對象

loginButton = (Button) findViewById(R.id.login_btn);

OnClickListener listener = new ButtonClickListener();

loginButton.setOnClickListener(listener);

}

/**
* 監聽器類

*/

class ButtonClickListener implements OnClickListener

{

@Override

public void onClick(View v)

{

switch (v.getId())

{

case R.id.login_btn:

//點擊後的邏輯處理

break;

}

}

}

『肆』 Android一個按鈕和一個文本顯示組件都要實現單擊事件,其主要區別在哪裡

1、(方式一)在與事件綁定時定義事件監聽器
該方法是當通過調用組件的setXXXListener()方法設置監聽器時,定義只能當前的組件使用的事件監聽器,代碼如下

1 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
2
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_main);
7
8
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnClick = findViewById(R.id.btn_click);
//使用findViewById方法對控制項進行獲取
//R.id.btn_click對應布局中添加的id屬性
btnClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//裡面寫點擊後想要實現的效果
Toast.makeText(MainActivity.this,
"按鈕被點擊", Toast.LENGTH_SHORT).show();
//這里是彈出一個消息---"按鈕被點擊"
}
});
}
}
9 //使用findViewById方法對控制項進行獲取 10 //R.id.btn_click對應布局中添加的id屬性 11 12 btnClick.setOnClickListener(new View.OnClickListener() { 13 @Override 14 public void onClick(View view) { 15 //裡面寫點擊後想要實現的效果 16 Toast.makeText(MainActivity.this, 17 "按鈕被點擊", Toast.LENGTH_SHORT).show(); 18 //這里是彈出一個消息---"按鈕被點擊" 19 } 20 }); 21 } 22 23 }
復制代碼
【提示】Button btnClick = findViewById(R.id.btn_click);在不同版本編譯器可能需要類型轉換。(Alt +Enter提供類型轉換處理)

『伍』 如何讓Android中的組件不響應觸屏事件

禁止Android 組件響應事件,有以下方式:

  1. 給控制項注冊一個touch事件,並return true,即可。

view.onTouchEvent(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

return true;

}

})

2.給控制項設置setClickable(false),即可。

『陸』 Framework事件機制——手撕Android事件處理的三種方法

Android的事件處理的三種方法:

setOnClickListener,setOnLongClickListener、setOnTouchListener

注意:如果onTouchEvent方法return true,則單擊事件和長摁事件不再執行;若onLongClick方法返回true,則單擊事件不再處理。

需要定義繼承組件的類,重寫回調方法Touch方法執行時,先被Activity捕獲,DispatchTouchEvent方法處理。return false,交給上層的onTouchEvent方法處理;return super.dispatchTouchEvent(ev),則傳遞給最外層的View。

View用Dispatch方法處理,return false,由上層的onTouchEvent方法處理。如果返回super.dispatchTouchEvent(ev),則本層的onInterceptTouchEvent攔截,如果攔截true,則攔截,false不攔截,傳遞給子View的DispatchTouchEvent處理。

常用的回調方法:onKeyDown,onKeyLongPress,onKeyUp,onTouchEvent,onTrackballEvent(軌跡球事件)監聽和回調同時存在時,先調用監聽。

流程模型圖:

Event source 事件源
Event 事件
Event Listener 事件監聽器
下面我們來看一下點擊事件和觸摸事件的監聽三要素具體是那部分:

由於點擊事件比較簡單,系統已經幫我們處理了,並沒有找到具體事件是哪個。

View.OnClickListener 單擊事件監聽器必須實現的接⼝
View.OnCreateContextMenuListener 創建上下⽂菜單事件
View.OnFocusChangeListener 焦點改變事件
View.OnKeyListener 按鍵事件監聽器
View.OnLongClickListener 長按事件監聽器
View.OnTouchListener 觸摸屏事件監聽器

⾸先,事件監聽機制中由事件源,事件,事件監聽器三類對象組成。
事件監聽器處理流程:

在此以OnClickListener單擊事件為例使用intent來實現頁面的跳轉

監聽事件處理是事件源與事件監聽器分開的而基於回調的事件處理UI組件不但是事件源,而且還是事件監聽器,通過組件的相關回調方法處理對應的事件。

Ⅰ. 自定義View類,繼承自需要的View UI類。ex :自定義 MyButton按鈕類 extends 基礎Button類

Ⅱ. 復寫回調函數。ex:public boolean onTouchEvent(MotionEvent event)

每一個事件回調方法都會返回一個boolean值,①.如果返回true:表示該事件已被處理,不再繼續向外擴散,②.如果返回false:表示事件繼續向外擴散

而說到基於回調就離不開監聽機制

幾乎所有基於回調的事件處理方法都有一個boolean類型的返回值,該返回值用於表示該處理方法是否能完全處理該事件。
如果處理事件的回調方法返回true,表明該處理方法已經完全處理改事件,該事件不會傳播出去。
如果處理事件的回調方法返回false,表明該處理方法並未完全處理該事件,該事件會傳播出去。
對於基於回調的時間傳播而言,某組件上所發生的事件不僅會激發該組件上的回調方法,也會觸發該組件所在Activity的回調方法——只要事件能傳播到該Activity。

這里是在模擬器里進行的測試,這里按下鍵盤(而不是點擊),會看到 logcat 中的輸出,如下:

View類實現了KeyEvent.Callback介面中的一系列回調函數,因此,基於回調的事件處理機制通過自定義View來實現,自定義View時重寫這些事件處理方法即可。

Handler是一個消息分發對象。

Handler是Android系統提供的一套用來更新UI的機制,也是一套消息處理機制,可以通過Handler發消息,也可以通過Handler處理消息。

在下面介紹Handler機制前,首先得了解以下幾個概念:

在子線程執行完耗時操作,當Handler發送消息時,將會調用 MessageQueue.enqueueMessage ,向消息隊列中添加消息。 當通過 Looper.loop 開啟循環後,會不斷地從消息池中讀取消息,即調用 MessageQueue.next , 然後調用目標Handler(即發送該消息的Handler)的 dispatchMessage 方法傳遞消息, 然後返回到Handler所在線程,目標Handler收到消息,調用 handleMessage 方法,接收消息,處理消息。

從上面可以看出,在子線程中創建Handler之前,要調用 Looper.prepare() 方法,Handler創建後,還要調用 Looper.loop() 方法。而前面我們在主線程創建Handler卻不要這兩個步驟,因為系統幫我們做了。

初始化Looper

從上可以看出,不能重復創建Looper,每個線程只能創建一個。創建Looper,並保存在 ThreadLocal 。其中ThreadLocal是線程本地存儲區(Thread Local Storage,簡稱TLS),每個線程都有自己的私有的本地存儲區域,不同線程之間彼此不能訪問對方的TLS區域。

開啟Looper

發送消息

post方法:

send方法:

在子線程中,進行耗時操作,執行完操作後,發送消息,通知主線程更新UI。

本文講解了三個方面;Android事件機制;基於監聽、基於回調以及Handler消息處理。還有許多沒有講解到的知識點,我總結在了整理的一套Android進階筆記裡面;需要學習進階的同學可以前往獲取: Frame Work源碼解析手冊 、 Android核心技術進階手冊、實戰筆記、面試題綱資料

『柒』 android 怎麼知道一個view是否有點擊事件

(1)綁定Adapter,那你需要判定View組件的子Item嗎?分別注冊AdapterView.onItemclickListener不就可以了,裡面的參數回調可以區分點擊的是那一個子Item; (2)如果不需要區分子Item,給這兩個View組件分別注冊View.onClickListener就可以了;或者讓Activity實現View.onClickListener介面,在給這兩個View組件注冊監聽,然後在onClick方法里寫個switch語句,就可以按照case R.id.xxx 這樣做你想做的處理了。

『捌』 如何綁定android點擊事件

在Android中為組件綁定點擊事件的方式可以分為四種,
1、 在xml布局文件中,定義onclick的方式
<!—第一步在XML文件中給對應組件添加Onclick屬性-->
<Button
android:id="@+id/submitbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:onClick="buttonClickHandle"
android:layout_alignParentTop="true"
android:text="提交" />
//第二步在對應的Activity中創建一個與onClick屬性值相同的方法,並傳入一個View參數,當Button被點擊時就會回調這個方法。
public void buttonClickHandle(View view) {
Snackbar.make(coordinatorLayout, "你點擊了Button", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
另外三種綁定點擊事件的方式實際上就是通過組件調用setOnClickListener()的方法,下面我們就來看一下這個方法的源碼。
/**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}

根據源碼我們可以看到這個方法中需要一個OnClickListener的對象。下面我們就來看看這個OnClickListener對象是個什麼東東。
/**
* Interface definition for a callback to be invoked when a view is clicked.
*/
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
根據源碼我們可以看到實際上這個OnClickListener就是一個介面,這個介面中有一個onClick的抽象方法。所以我們在創建這個OnClickListener對象是還需要實現這個抽象方法。這個onClick的抽象方法實際上就是當我們點擊按鈕後會回調的方法。我們對於點擊事件的響應處理就在這個方法中進行。
現在我們已經了解了設置點擊事件的setOnClickListener方法,根據我們如何創建這個方法中的OnClickListener對象,我們設置點擊事件的方式可以分為如下三種:
1、內部類的形式
a. package com.example.hsport.catalog;

import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private CoordinatorLayout coordinatorLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator);
// 獲取button對象
Button button = (Button) findViewById(R.id.submitbutton);
//創建內部類的實例
MyListener myListener = new MyListener();
//設置button的點擊事件,將實現OnClickListener介面的內部類實例傳入到setOnClickListener方法中
button.setOnClickListener(myListener);
}

//創建一個內部類實現View.OnClickListener介面,並實現其onClick方法
private class MyListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Snackbar.make(coordinatorLayout, "你點擊了Button", Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
}
}

2、 匿名內部類的方式
package com.example.hsport.catalog;

import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private CoordinatorLayout coordinatorLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator);
//獲取Button對象
Button button = (Button) findViewById(R.id.submitbutton);
//以創建一個View.OnClickListener的匿名內部類,並實現它的onClick方法
button.setOnClickListener(new View.OnClickListener() {
//在onClick方法中我們就可以設置button的響應代碼了
@Override
public void onClick(View v) {
Snackbar.make(coordinatorLayout, "你點擊了Button",Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
});
}

3、 讓主類實現OnClickListener介面,然後再主類實現未實現的方法

package com.example.hsport.catalog;

import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private CoordinatorLayout coordinatorLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator);
//獲取Button對象
Button button = (Button) findViewById(R.id.submitbutton);
//因為我們讓MainActivity實現了View.OnClickListener這個介面,所以setOnClickListener方法中的參數直接傳入this即可。
button.setOnClickListener(this);
}

//因為MainActivity實現了View.OnClickListener介面,所以在MainActivity中還有要實現該介面中改的onClick方法來處理點擊事件。
@Override
public void onClick(View v) {
Snackbar.make(coordinatorLayout, "你點擊了Button",Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
}
關於如何給組件綁定點擊事件,是Android中的基礎知識,如果你還想更加詳細的了解,推薦你可以去一個叫做秒秒學的教程網站看看,夯實下基礎。

『玖』 android 點擊事件 為什麼不起作用

Android中View的點擊事件如果沒有觸發,那肯定是代碼寫的有問題,onClick事件有四種寫法:
1.匿名內部類:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//點擊後執行

}

});
2.自定義單擊事件監聽類:
class MyClickListener implements OnClickListener {
@Override
public void onClick(View v) {
//點擊後執行
}
}

3.Activity直接實現View.OnClickListener的onClick方法
@Override
public void onClick(View v) {
//點擊後執行
}

4.在XML文件中顯示指定按鈕的onClick屬性,這樣點擊按鈕時會利用反射的方式調用對應Activity中的click()方法:
android:onClick="onClick"
public void onClick(View v) {
//點擊後執行
}

閱讀全文

與android組件點擊事件相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163