Android开发学习之路(三)Button控件学习

Button,也就是按钮,是每一个app都不可缺少的,现在就开始学习Button控件

一、创建Button控件

在xml文件里面添加如下代码;\

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

当我们按住crtl点击Button,会发现Button继承自TextView;

1,为Button添加文本:

android:text="Click"

2,为Button添加事件

public class MainActivity extends AppCompatActivity {
private Button button = null;
private  final static int REQUEST_CODE = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.button);     
     button.setOnClickListener(View.OnClickListener); }

(1),查找按钮

第二行在MainActivity里面定义了一个全局的Button变量,以便我们以后调用;

接着使用findViewByid方法查找按钮

(2)添加事件

最后一行使用setOnClickListener方法为按钮添加了点击事件,按住ctrl点击这个方法的参数View.OnClickListener可以看到它是一个inference,也就是接口,既然是接口,就要定义一个类来实现这个接口,简单点说也就是我们自己定义这个Button的点击事件;

(3)自定义事件,这里提供两种方法

第一种方法:

a,首先定义一个叫做ButtonClick的类,如图;

Android开发学习之路(三)Button控件学习

这里的implements是一个类,它是实现一个接口所用的关键字,他用来实现接口中定义的抽象方法。

我们需要注意,实现一个接口,就必须要实现接口中的所有方法。

b,点击红色的灯泡,选择implement methods,它将会自动补全我们还没有写的代码,如图:

Android开发学习之路(三)Button控件学习

c,定义事件

这里介绍一下Toast,它是一个类,可以在屏幕上显示一种非常友好的提示信息,而不会对我们的操作产生干扰

Toast.makeText(MainActivity.this,"你点击了按钮",Toast.LENGTH_SHORT).show();

makeText方法里面有三个参数:

第一个是提示信息要展示的界面,由于我们自己定义的这个事件是定义在ButtonClick这个类里面而不是MainActivity类里面,所以假如我们要在MianActivity里面展示提示就不能用this,而要使用MainActivity.this;第二个参数是提示的文本,同样这个文本也可以定义在strings.xml里面,引用它的id来使用;第三个参数是显示的时长,这里面使用的是Android自定义的Toast.LENGTH_SHORT;

最后使用show()方法展示。

d,在setOnClickListener方法里新建一个ButtonClick对象

button.setOnClickListener(new ButtonClick());

最后代码为

public class MainActivity extends AppCompatActivity {
    private Button button = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new ButtonClick());
    }

    class ButtonClick implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            Toast.makeText(MainActivity.this, "你点击了按钮", Toast.LENGTH_SHORT).show();
        }
    }
}

这是第一种添加事件的方法,然而Android官方推荐的方法是第二种,内部匿名类方法

第二种方法;

与第一种方法不同的是,内部匿名类定义在类的内部并且它没有名字,简单点说,就是我们在定义这个接口的时候,同时实现了接口的方法,即


public class MainActivity extends AppCompatActivity {
    private Button button = null;
    private final static int REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "你点击了按钮", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

其实第二种方法也是有缺点,假如有多个Button,那么当我们为每个Button添加事件的时候就会进行很多重复性的工作,不仅如此,这种方法也不满足java面向对象封装的思想,所以,我们需要这样进行改进:

(1),定义一个变量

private View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this, "你点击了按钮", Toast.LENGTH_SHORT).show();
    }
};

(2),传递这个变量

button.setOnClickListener(listener);

对就是这样。

下面考虑一下这个问题,当我们有两个或者多个Button的时候,我们该怎样为每个Button添加不同的事件呢?

代码如下

public class MainActivity extends AppCompatActivity {
    private Button button = null;
    private Button button2 = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        button2 = (Button) findViewById(R.id.button2);
        button.setOnClickListener(listener);
        button2.setOnClickListener(listener);
    }
   private View.OnClickListener listener = new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           Button btn = (Button)v;
           switch (btn.getId()) {
               case R.id.button:
                   Toast.makeText(MainActivity.this, "你点击了Button1", Toast.LENGTH_SHORT).show();
                   break;
               case R.id.button2
                   Toast.makeText(MainActivity.this, "你点击了Button2", Toast.LENGTH_SHORT).show();
               break;
           }

       }
   };

上述代码其实很简单,xml里面添加两个button,MainAvtivity里面定义了两个Button,分别寻找id,再分别添加事件,

而为每个Button添加不同的事件则使用了switch跳转语句。getId()方法是得到我们已经找到的id。

需要注意的是listener变量里面我们将我们的button对象强制转换成了View对象,为什么这么做,在第一篇笔记里面有说

这就是Button的简单入门

Android开发之路是如此有趣,而我却一人独行。