1. 简介
Button组件是Android中常用的组件,Button常需要和View.OnClickListener配合使用。这里记录下Button配置监听的过程。
2. 代码分析
2.1 Layout的XML代码
<Buttonandroid: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;@Overrideprotected 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;}@Overridepublic 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;@Overrideprotected 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);}@Overridepublic void onClick(View view) {if(view.getId()==R.id.btn){//执行btn对应的操作}else if(view.getId()==R.id.btn1){//执行btn1对应的操作}}
以上是简单的示例代码,仅供学习和参考使用。