1.实现方式

匿名内部类的实现

独立类的实现

实现接口的方式

 

------------------------匿名内部类的实现----------------------------------------

1.  xml布局文件定义按钮

 

2.Java中获取按钮并绑定点击事件

package com.example.mooc;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    private Button login_button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 将布局文件引入到Activity
        setContentView(R.layout.button_imgbutton);

        /**
         * 1. 初始化一个按钮,通过this.findViewById(R.id.button1)
         * 原理:通过R.java中的唯一id查找到的都是view,强制转换为一个button
         * 
         * 2.设置button的监听器,通过监听器实现点击效果
         */
        login_button = (Button) this.findViewById(R.id.button1);

        /**
         * 匿名内部类实现
         */
        login_button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                System.out.println("这是点击事件");
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

 3.运行测试:(点击登录按钮)

 

 

注意:安卓中的System.out.print会在logcat中打印。

 ------------------------外部类的实现---------------------------------------

将按钮的公共处理逻辑写到外部类中,然后设置事件监听器的时候写一个外部类调用其公共逻辑并写上单独处理的逻辑

Toast.makeText(MainActivity.this, "图片按钮被点击", 1).show();//弹出一个类似于消息框的窗口。

arg0.setAlpha(0.5f); // 透明度为0-1的float(设置透明度)

 

package com.example.mooc;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends Activity {

    private Button login_button;
    private ImageButton img_button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 将布局文件引入到Activity
        setContentView(R.layout.button_imgbutton);

        /**
         * 1. 初始化一个按钮,通过this.findViewById(R.id.button1)
         * 原理:通过R.java中的唯一id查找到的都是view,强制转换为一个button
         * 
         * 2.设置button的监听器,通过监听器实现点击效果
         */
        login_button = (Button) this.findViewById(R.id.button1);

        /**
         * 外部类实现
         */
        login_button.setOnClickListener(new MyOnClicker() {

            @Override
            public void onClick(View arg0) {

                super.onClick(arg0);
                Toast.makeText(MainActivity.this, "登录按钮被点击", 1).show();
            }
        });

        img_button = (ImageButton) findViewById(R.id.imageButton1);
        img_button.setOnClickListener(new MyOnClicker() {

            @Override
            public void onClick(View arg0) {

                super.onClick(arg0);
                Toast.makeText(MainActivity.this, "图片按钮被点击", 1).show();
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

class MyOnClicker implements OnClickListener {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        // 让所有当前外部类的点击事件的按钮都作出同样的动作,例如改变button的透明度
        arg0.setAlpha(0.5f); // 透明度为0-1的float
    }

}

 

 效果:

 

    

 

 

  ------------------------接口方式的实现---------------------------------------

 1.mainAcvitity实现OnClickListener接口

 

 2.重写onclick方法

  打印日志,可以设置过滤器查看

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Log.i("tag", "这是第三种方式");
    }

 

3.绑定事件

        login_button = (Button) this.findViewById(R.id.button1);
        img_button = (ImageButton) findViewById(R.id.imageButton1);
        // 第三种实现方式:
        login_button.setOnClickListener(this);
        img_button.setOnClickListener(this);

 

 4.运行效果:

 

点击后查看logcat

 

 

 

 过滤器的设置

  

这样就只会显示tag的消息。

 

----------------------------------标签绑定的实现(结合自定义组件)-----------------------------------

package com.example.test2;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.Button;

public class MyButton extends Button {

    public MyButton(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public MyButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

}

 

 

布局文件:(绑定onclick事件)

        <com.example.test2.MyButton
            android:id="@+id/myButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="clickButton"
            android:text="标签" />

 

编写事件(MainActivity与自定义组件均可)

    public void clickButton(View view){
        // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, "这是第四种方式", 1).show();
    }

 

【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】