美文网首页
Button的几种单击响应用法

Button的几种单击响应用法

作者: Glemontree | 来源:发表于2016-08-21 10:47 被阅读0次

    一、通过在布局文件中为Button添加onClick属性

    通常每一种属性既可以在xml文件中进行静态配置,也可以在代码中进行动态配置,而在布局文件中为Button添加onClick属性则属于静态配置,在xml文件中给Button添加onClick属性的代码如下:

    <Button
        android:id="@+id/button1"
        android:onClick="onClick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 1" />
    

    这样在代码中只需要实现onClick()函数即可,如下面代码所示:

    package com.example.buttondemo;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void onClick(View view) {
        Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT).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;
    }
    } 
    

    这样程序运行结果如下:

    button1.png

    二、通过实现onClickListener接口

    我们也可以在定义Activity时让其实现OnClickListener接口,并且在Activity中实现onClick方法,在Activity的构造函数中使用setOnClickListener方法为Button添加OnClick响应方法,注意此时需要在xml文件中取消Button的onClick属性,其xml文件如下所示:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <!-- <Button
        android:onClick="onClick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button1" /> -->
    
    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2"/>
    </LinearLayout>
    

    此时相应的Activity代码如下所示:

    package com.example.buttondemo;
    
    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.Toast;
    
    public class MainActivity extends Activity implements OnClickListener{
    private Button button2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(this);
    }
    
    /*public void onClick(View view) {
        Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT).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;
    }
    
    public void onClick(View view) {
        Toast.makeText(MainActivity.this, "Button2", Toast.LENGTH_SHORT).show();
    }
    
    }
    

    程序运行结果如下:

    button2.png

    三、使用内部匿名类来实现

    在安卓开发过程中,匿名类使用的场合十分的多,这里,我们使用内部匿名类为Button添加onClick响应函数,其代码如下:

    package com.example.buttondemo;
    
    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.Toast;
    
    public class MainActivity extends Activity /*implements OnClickListener*/{
    //  private Button button2;
    private Button button3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(this);*/
        button3 = (Button) findViewById(R.id.button3);
        button3.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, "Button3", Toast.LENGTH_SHORT).show();
            }
        });
    }
    
    /*public void onClick(View view) {
        Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT).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;
    }
    
    /*public void onClick(View view) {
        Toast.makeText(MainActivity.this, "Button2", Toast.LENGTH_SHORT).show();
    }*/
    
    }
    

    注意其中的代码:

    button3.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, "Button3", Toast.LENGTH_SHORT).show();
            }
        });
    

    这其实相当于两步:

    1. 通过setOnClickListener()传入一个实现了OnClickListener接口的类的对象。
      button3.setOnClickListener(new OnClickListenerImplement());
    2. 定义一个类实现OnClickListener接口,并在内部实现具体的onClick方法。
      class OnClickListenerImplement implements OnClickListener { public void onClick(View view) { Toast.makeText(MainActivity.this,"Button3", Toast.LENGTH_SHORT).show(); } }
      在用匿名内部类实现的时候,使用Toast时,其第一个参数千万不要直接传入this指针,因为此时this指针是指向匿名类的,应当使用MainActivity.this。

    总结:

    以上就是实现Button的onClick方法的几种方式,有什么不对的欢迎大家指出,有其他方法也欢迎大家提出,谢谢!

    相关文章

      网友评论

          本文标题:Button的几种单击响应用法

          本文链接:https://www.haomeiwen.com/subject/blaisttx.html