这几天多次使用按钮事件,在此总结几种常见的实现方法
在实验之前研读了以下博客
《Android按钮单击事件的四种常用写法总结》
《Button 点击事件onclick实现的四种方式》
《Button点击事件的三种实现方式》
《外部类监听事件的点击事件》
第一种,内部匿名类
这种按钮只能点击一次
控件属性:
<Button
android:id="@+id/b01"
android:layout_width="300dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:text="@string/b01"
android:background="@color/colorGreen"
/>
一个简单的按钮控件,id为b_01,位置位于屏幕中央,背景我自定义青绿色,文字内容为<string name="b01">内部匿名类</string>
实现:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.test_activty);
Button button1 = (Button) findViewById(R.id.b01);
//从R中找到b01的资源
button1.setOnClickListener(new View.OnClickListener(){//监听参数为匿名类
@Override
public void onClick (View v){ Toast.makeText(MainActivity.this,"success",Toast.LENGTH_LONG).show();//点击按钮会有toast弹出说明事件发生
}
}
);
}
}
效果:
第二种:内部类
控件属性:
<Button
android:id="@+id/b02"
android:layout_width="300dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:text="@string/b02"
android:background="@color/colorRed"
/>
与第一个按钮比,id改b02,颜色改为红色,文字内容<string name="b02">内部类</string>
实现:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.test_activty);
Button button1 = (Button) findViewById(R.id.b02);
button1.setOnClickListener(new Buttonc());
}
private class Buttonc implements View.OnClickListener {
public void onClick(View v) {
Toast.makeText(MainActivity.this, "aaaa", Toast.LENGTH_LONG).show();
}
}
}
效果:
6.15日补充
内部类可以用switch选择R.id来触发多个按钮不同事件
控件属性:略
实现:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity02);
Log.i("Activity02", "onCreate()");
Button button1=(Button)findViewById(R.id.button1);
Button button2=(Button)findViewById(R.id.button2);
button1.setOnClickListener(this);
}
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.button1:
Intent intent=new Intent();
intent.setClassName("cn.itcast.activity","cn.itcast.activity.Activity01");
startActivity(intent);
break;
case R.id.button2:
Toast.makeText(this,"123",Toast.LENGTH_LONG);
break;
}
}
第三种:外部类
控件属性:
<Button
android:id="@+id/b03"
android:layout_width="300dp"
android:layout_height="70dp"
android:layout_gravity="center"
android:text="@string/b03"
android:background="@color/colorYellow"
/>
改id改颜色
实现
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.test_activty);
Button button1 = (Button) findViewById(R.id.b03);
Buttonc bbuttonc=new Buttonc();
button1.setOnClickListener( new Buttonc()
{
public void onClick(View v) {
Toast.makeText(MainActivity.this,"cccc",Toast.LENGTH_LONG).show();
}
}
);
}
}
class Buttonc implements View.OnClickListener {
public void onClick(View v) {
}
}
监听类写在mainactivty外面,且在定义里无法使用toast
效果
第四种:activty直接触发
控件:<Button
android:id="@+id/b04"
android:layout_width="300dp"
android:layout_height="70dp"
android:layout_gravity="center"
android:text="@string/b04"
android:background="@color/colorBlue"
/>
实现:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.test_activty);
Button button1 = (Button) findViewById(R.id.b04);
button1.setOnClickListener(this);}
public void onClick(View v) {
Toast.makeText(MainActivity.this,"终于写完了",Toast.LENGTH_LONG).show();
}
}
直接在oncreate外面写一个onclick,不经过任何类
效果: