控件的点击事件处理有两种方式,在开发中我们常用第二种
<1>方法一:
——在布局文件里的每个控件里加上onClick属性
格式: android:onClick="方法名"
——然后,在对应使用这个布局的Activity上写出对应的方法的实现
public void 方法名(View v){
点击后要执行的代码;
}
例子:
——在布局文件里的控件里加上onClick属性
<TextView
android:onClick="onCancle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:background="@drawable/shape_retangle"
android:text="C"
android:textSize="30sp"/>
——然后,在对应使用这个布局的Activity上写出对应的方法的实现
public void onCancle(View v){
//这里传过来的View v就是点击的布局里的对应控件TextView
Log.d(TAG,"cancle be click...");
if(v instanceof TextView){
String vText = ((TextView) v).getText().toString();
Log.d(TAG,"被点击的按键是: " + vText);
}
——最终点击之后显示结果为
2021-09-01 08:55:20.486 4591-4591/com.example.uitest D/MainActivity: cancle be click...
2021-09-01 08:55:20.486 4591-4591/com.example.uitest D/MainActivity: 被点击的按键是: C
<2>方法二:(比较常用)
——通过id声明的方式来找到控件,然后再对各个控件设置相应的点击事件
——首先,在布局中给控件添加id
<TextView
android:id="@+id/tv_cheng"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="✖"
android:background="#e47f26"
android:textSize="30sp"/>
<TextView
android:id="@+id/tv_chu"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="/"
android:background="#e47f26"
android:textSize="30sp"/>
——然后,在对应的Activity中找到控件,并设置相应的点击事件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.jisuanqi_layout);
//找控件
initView();
//设置点击事件
initClickEvent();
}
private void initView(){
//Ctrl+Alt+F可以把变量cheng和chu设置为成员变量
cheng = this.findViewById(R.id.tv_cheng);
chu = this.findViewById(R.id.tv_chu);
}
private void initClickEvent(){
//第一种设置方式
cheng.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG,"点击的按键为:" + ((TextView) view).getText().toString());
}
});
//第二种设置方式
chu.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//第二种设置方式重写了系统中的onClick方法
//如果有多个控件设置了点击事件,那么在这里面统一进行处理的时候,需要先判读当前传入的是哪一个控件
if (view == chu){
Log.d(TAG,"当前点击的按键是:"+ ((TextView) view).getText().toString());
}else if(view == cheng){
//...
}
}