1. 简介
Button组件是Android中常用的组件,Button常需要和View.OnClickListener配合使用。这里记录下Button配置监听的过程。
2. 代码分析
2.1 Layout的XML代码
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height = "wrap_content"
android:text = "hhh"
android:textColor="@color/black"
android:onClick="doClick"/>
可以看到Button中是可以放一个 android:onClick的属性,指定一个具体的click方法的,此种策略需要在Java代码中实现doClick方法,这样导致XML样式和Java逻辑形成了高耦合,这一般是程序开发过程中比较忌讳的,因此一般不这样来写,一般通过View.OnClickListener监听器实现Button的功能。
2.2 单个按钮时View.OnClickListener的示例代码
package com.example.learn;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tv_main);
//ViewGroup.LayoutParams layoutParams = tv.getLayoutParams();
//layoutParams.width = 100;
//tv.setLayoutParams(layoutParams);
Button btn = findViewById(R.id.btn);
btn.setOnClickListener(new BtnListener(tv));
}
static class BtnListener implements View.OnClickListener{
private final TextView tv;
public BtnListener(TextView tv) {
this.tv = tv;
}
@Override
public void onClick(View view) {
String s =String.format("您点击了 %s",((Button)View).getText());
tv.setText(s);
}
}
}
如以上代码,当单个按钮时可以用上述代码防止内存泄漏。这里需要指明,一般在OnCreate方法中需要将组件全部加载,这样在Activity的整个生命周期内,仅需要一次加载即可。不过此时有问题,如果有多个按钮时,需要多组btnListener的方法,这样显然影响开发效率。
2.3 多个按钮时View.OnClickListener的示例代码
package com.example.learn;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tv_main);
//ViewGroup.LayoutParams layoutParams = tv.getLayoutParams();
//layoutParams.width = 100;
//tv.setLayoutParams(layoutParams);
Button btn = findViewById(R.id.btn);
btn.setOnClickListener(this);
Button btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if(view.getId()==R.id.btn){
//执行btn对应的操作
}else if(view.getId()==R.id.btn1){
//执行btn1对应的操作
}
}
以上是简单的示例代码,仅供学习和参考使用。