按钮点击事件

按钮点击事件

方式一:在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);
        }
    }
}

 

posted @ 2022-08-29 21:02  六味地黄丸  阅读(596)  评论(0编辑  收藏  举报