按钮点击事件
按钮点击事件
方式一:在xml文件中设置Button的属性onClick,属性值是一个方法名,当点击按钮时就会执行java代码中的这个方法,以此来处理点击事件。
xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" tools:context=".ButtonClickListenerActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="click1" android:text="按钮:通过onClick属性监听用户点击事件" android:textAllCaps="false" /> <TextView android:id="@+id/tv_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="13sp" /> </LinearLayout>
Java代码
public class ButtonClickListenerActivity extends AppCompatActivity { TextView tv_result;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_button_click_listener); tv_result = findViewById(R.id.tv_result); } public void click1(View view) { String desc = String.format("%s 用户点击了 %s", DateUtil.getNowDate(), ((Button) view).getText()); tv_result.setText(desc); } }
注:在xml文件中设置Button的onClick属性,使用这种方式处理点击事件的缺点在于,提高了xml跟java代码的耦合性,不利于xml布局文件的复用,而实际上最好是让两者不发生关系,无论怎么修改都互不影响。
监听器:监听器用来监听控件的动作行为,只有当控件发生了指定的动作,监听器才会触发开关去执行相应的代码逻辑。
按钮控件有两种常用的监听器:点击监听器;长按监听器
点击监听器:通过setOnClickListener方法设置,按钮被按住少于500ms,会触发点击事件。
方式二:设置点击监听器
1.指定单独的点击监听器
xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" tools:context=".ButtonClickListenerActivity"> <Button android:id="@+id/btn_click_single" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="给按钮设置单独的点击监听器" android:textAllCaps="false" /> <TextView android:id="@+id/tv_result" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="10dp" android:text="这里查看按钮点击结果" android:textSize="13sp" /> </LinearLayout>
Java代码
public class ButtonClickListenerActivity extends AppCompatActivity { TextView tv_result; Button btn_click_single; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_button_click_listener); tv_result = findViewById(R.id.tv_result); btn_click_single = findViewById(R.id.btn_click_single); View.OnClickListener onClickListener = new MyOnClickListener(tv_result); btn_click_single.setOnClickListener(onClickListener); } //使用静态内部类,减少内存泄漏 static class MyOnClickListener implements View.OnClickListener { TextView tv_result; public MyOnClickListener(TextView tv_result) { this.tv_result = tv_result; } @Override public void onClick(View v) { String desc = String.format("%s 点击了按钮 %s", DateUtil.getNowDate(), ((Button) v).getText()); tv_result.setText(desc); } } }
2.指定公共的点击监听器
xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" tools:context=".ButtonClickListenerActivity"> <Button android:id="@+id/btn_click_single" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="给按钮设置公共的点击监听器" android:textAllCaps="false" /> <TextView android:id="@+id/tv_result" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="10dp" android:text="这里查看按钮点击结果" android:textSize="13sp" /> </LinearLayout>
Java代码
public class ButtonClickListenerActivity extends AppCompatActivity implements View.OnClickListener { TextView tv_result; Button btn_click_single; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_button_click_listener); tv_result = findViewById(R.id.tv_result); btn_click_single = findViewById(R.id.btn_click_single); btn_click_single.setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_click_single) { String desc = String.format("%s 点击了按钮 %s", DateUtil.getNowDate(), ((Button) v).getText()); tv_result.setText(desc); } } }