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的类,如图;
这里的implements是一个类,它是实现一个接口所用的关键字,他用来实现接口中定义的抽象方法。
我们需要注意,实现一个接口,就必须要实现接口中的所有方法。
b,点击红色的灯泡,选择implement methods,它将会自动补全我们还没有写的代码,如图:
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开发之路是如此有趣,而我却一人独行。