• 基础复习——Button——按钮——触发事件——监听器(单独&公共)——点击事件与长按事件——禁用&恢复按钮...


    按钮控件Button由TextView派生而来,它们之间的区别有:

    (1)Button拥有默认的按钮背景,而TextView默认无背景;

    (2)Button的内部文本默认居中对齐,而TextView的内部文本默认靠左对齐;

    (3)Button会默认将英文字母转为大写,而TextView保持原始的英文大小写;

    与TextView相比,Button增加了两个新属性:

    (1)textAllCaps属性,它指定了是否将英文字母转为大写,为true是表示自动转为大写,为false表示不做大写转换。

    (2)onClick属性,它用来接管用户的点击动作,指定了点击按钮时要触发哪个方法;

    布局:

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent"
    4. android:orientation="vertical"
    5. android:padding="5dp">
    6. <TextView
    7. android:layout_width="match_parent"
    8. android:layout_height="wrap_content"
    9. android:gravity="center"
    10. android:text="下面的按钮英文默认大写"
    11. android:textColor="@color/black"
    12. android:textSize="17sp" />
    13. <Button
    14. android:layout_width="match_parent"
    15. android:layout_height="wrap_content"
    16. android:text="Hello World"
    17. android:textColor="@color/black"
    18. android:textSize="17sp" />
    19. <TextView
    20. android:layout_width="match_parent"
    21. android:layout_height="wrap_content"
    22. android:gravity="center"
    23. android:text="下面的按钮英文保持原状"
    24. android:textColor="@color/black"
    25. android:textSize="17sp" />
    26. <Button
    27. android:layout_width="match_parent"
    28. android:layout_height="wrap_content"
    29. android:text="Hello World"
    30. android:textAllCaps="false"
    31. android:textColor="@color/black"
    32. android:textSize="17sp" />
    33. <Button
    34. android:id="@+id/btn_click_xml"
    35. android:layout_width="match_parent"
    36. android:layout_height="wrap_content"
    37. android:onClick="doClick"
    38. android:text="直接指定点击方法"
    39. android:textColor="#000000"
    40. android:textSize="17sp" />
    41. <TextView
    42. android:id="@+id/tv_result"
    43. android:layout_width="match_parent"
    44. android:layout_height="wrap_content"
    45. android:text="这里查看按钮的点击结果"
    46. android:textColor="#000000"
    47. android:textSize="17sp" />
    48. LinearLayout>

     

    代码:

    1. package com.example.myapplication;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.view.View;
    5. import android.widget.Button;
    6. import android.widget.TextView;
    7. public class NextActivity extends AppCompatActivity
    8. {
    9. private TextView tv_result; // 声明一个文本视图实例
    10. @Override
    11. protected void onCreate(Bundle savedInstanceState)
    12. {
    13. super.onCreate(savedInstanceState);
    14. setContentView(R.layout.activity_next);
    15. tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图
    16. }
    17. // activity_button_style.xml中给btn_click_xml指定了点击方法doClick
    18. public void doClick(View view)
    19. {
    20. String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) view).getText());
    21. tv_result.setText(desc); // 设置文本视图的文本内容
    22. }
    23. }

    DateUtil
    
    1. package com.example.myapplication;
    2. import android.annotation.SuppressLint;
    3. import java.text.SimpleDateFormat;
    4. import java.util.Date;
    5. @SuppressLint("SimpleDateFormat")
    6. public class DateUtil
    7. {
    8. // 获取当前的日期时间
    9. public static String getNowDateTime()
    10. {
    11. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    12. return sdf.format(new Date());
    13. }
    14. // 获取当前的时间
    15. public static String getNowTime()
    16. {
    17. SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    18. return sdf.format(new Date());
    19. }
    20. }

    ===================================================================================================================

    监听器,意思是专门监听控件的动作行为。只有控件发生了指定的动作,监听器才会触发开关去执行对应的代码逻辑。

    按钮控件有两种常用的监听器:

    (1)点击监听器,通过setOnClickListener方法设置。按钮被按住少于500毫秒时,会触发点击事件。

    (2)长按监听器,通过setOnLongClickListener方法设置。按钮被按住超过500毫秒时,会触发长按事件。

    监听器  

    第一个是匿名内部类,

    布局:

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent"
    4. android:orientation="vertical">
    5. <LinearLayout
    6. android:layout_width="match_parent"
    7. android:layout_height="wrap_content"
    8. android:orientation="horizontal">
    9. <Button
    10. android:id="@+id/btn_click_single"
    11. android:layout_width="0dp"
    12. android:layout_height="wrap_content"
    13. android:layout_weight="1"
    14. android:text="指定单独的点击监听器"
    15. android:textColor="#000000"
    16. android:textSize="15sp" />
    17. <Button
    18. android:id="@+id/btn_click_public"
    19. android:layout_width="0dp"
    20. android:layout_height="wrap_content"
    21. android:layout_weight="1"
    22. android:text="指定公共的点击监听器"
    23. android:textColor="#000000"
    24. android:textSize="15sp" />
    25. LinearLayout>
    26. <TextView
    27. android:id="@+id/tv_result"
    28. android:layout_width="match_parent"
    29. android:layout_height="wrap_content"
    30. android:paddingLeft="5dp"
    31. android:text="这里查看按钮的点击结果"
    32. android:textColor="#000000"
    33. android:textSize="15sp" />
    34. LinearLayout>

    代码:

    1. package com.example.myapplication;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.view.View;
    5. import android.widget.Button;
    6. import android.widget.TextView;
    7. public class NextActivity extends AppCompatActivity implements View.OnClickListener
    8. {
    9. private TextView tv_result; // 声明一个文本视图实例
    10. @Override
    11. protected void onCreate(Bundle savedInstanceState)
    12. {
    13. super.onCreate(savedInstanceState);
    14. setContentView(R.layout.activity_next);
    15. tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图
    16. // 从布局文件中获取名叫btn_click_single的按钮控件
    17. Button btn_click_single = findViewById(R.id.btn_click_single);
    18. // 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法
    19. btn_click_single.setOnClickListener(new MyOnClickListener());
    20. // 从布局文件中获取名叫btn_click_public的按钮控件
    21. Button btn_click_public = findViewById(R.id.btn_click_public);
    22. // 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法
    23. btn_click_public.setOnClickListener(this);
    24. }
    25. // 定义一个点击监听器,它实现了接口View.OnClickListener
    26. class MyOnClickListener implements View.OnClickListener
    27. {
    28. @Override
    29. public void onClick(View v) // 点击事件的处理方法
    30. {
    31. String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
    32. tv_result.setText(desc); // 设置文本视图的文本内容
    33. }
    34. }
    35. @Override
    36. public void onClick(View v) // 点击事件的处理方法
    37. {
    38. if (v.getId() == R.id.btn_click_public) // 来自于按钮btn_click_public
    39. {
    40. String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
    41. tv_result.setText(desc); // 设置文本视图的文本内容
    42. }
    43. }
    44. }

     

    代码也可以如下:

    1. package com.example.myapplication;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.view.View;
    5. import android.widget.Button;
    6. import android.widget.TextView;
    7. public class NextActivity extends AppCompatActivity implements View.OnClickListener
    8. {
    9. private TextView tv_result; // 声明一个文本视图实例
    10. @Override
    11. protected void onCreate(Bundle savedInstanceState)
    12. {
    13. super.onCreate(savedInstanceState);
    14. setContentView(R.layout.activity_next);
    15. tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图
    16. // 从布局文件中获取名叫btn_click_single的按钮控件
    17. Button btn_click_single = findViewById(R.id.btn_click_single);
    18. // 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法
    19. btn_click_single.setOnClickListener(new MyOnClickListener() {
    20. @Override
    21. public void onClick(View v) // 点击事件的处理方法
    22. {
    23. String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
    24. tv_result.setText(desc); // 设置文本视图的文本内容
    25. }
    26. });
    27. findViewById(R.id.btn_click_public).setOnClickListener(this);
    28. }
    29. // 定义一个点击监听器,它实现了接口View.OnClickListener
    30. class MyOnClickListener implements View.OnClickListener
    31. {
    32. @Override
    33. public void onClick(View v) // 点击事件的处理方法
    34. {
    35. String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
    36. tv_result.setText(desc); // 设置文本视图的文本内容
    37. }
    38. }
    39. @Override
    40. public void onClick(View v) // 点击事件的处理方法
    41. {
    42. if (v.getId() == R.id.btn_click_public) // 来自于按钮btn_click_public
    43. {
    44. String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
    45. tv_result.setText(desc); // 设置文本视图的文本内容
    46. }
    47. }
    48. }

     

    ==================================================================================================

    布局:

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent"
    4. android:orientation="vertical">
    5. <LinearLayout
    6. android:layout_width="match_parent"
    7. android:layout_height="wrap_content"
    8. android:orientation="horizontal">
    9. <Button
    10. android:id="@+id/btn_longclick_single"
    11. android:layout_width="0dp"
    12. android:layout_height="wrap_content"
    13. android:layout_weight="1"
    14. android:text="指定单独的长按监听器"
    15. android:textColor="#000000"
    16. android:textSize="15sp" />
    17. <Button
    18. android:id="@+id/btn_longclick_public"
    19. android:layout_width="0dp"
    20. android:layout_height="wrap_content"
    21. android:layout_weight="1"
    22. android:text="指定公共的长按监听器"
    23. android:textColor="#000000"
    24. android:textSize="15sp" />
    25. LinearLayout>
    26. <TextView
    27. android:id="@+id/tv_result"
    28. android:layout_width="match_parent"
    29. android:layout_height="wrap_content"
    30. android:paddingLeft="5dp"
    31. android:text="这里查看按钮的长按结果"
    32. android:textColor="#000000"
    33. android:textSize="15sp" />
    34. LinearLayout>

    代码:

    1. package com.example.myapplication;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.view.View;
    5. import android.widget.Button;
    6. import android.widget.TextView;
    7. public class NextActivity extends AppCompatActivity implements View.OnLongClickListener
    8. {
    9. private TextView tv_result; // 声明一个文本视图实例
    10. @Override
    11. protected void onCreate(Bundle savedInstanceState)
    12. {
    13. super.onCreate(savedInstanceState);
    14. setContentView(R.layout.activity_next);
    15. tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图
    16. // 从布局文件中获取名叫btn_click_single的按钮控件
    17. Button btn_longclick_single = findViewById(R.id.btn_longclick_single);
    18. // 设置长按监听器,一旦用户长按按钮,就触发监听器的onLongClick方法
    19. btn_longclick_single.setOnLongClickListener(new MyOnLongClickListener());
    20. // 从布局文件中获取名叫btn_click_public的按钮控件
    21. Button btn_longclick_public = findViewById(R.id.btn_longclick_public);
    22. // 设置长按监听器,一旦用户长按按钮,就触发监听器的onLongClick方法
    23. btn_longclick_public.setOnLongClickListener(this);
    24. }
    25. @Override
    26. public boolean onLongClick(View v) // 长按事件的处理方法
    27. {
    28. if (v.getId() == R.id.btn_longclick_public) // 来自于按钮btn_longclick_public
    29. {
    30. String desc = String.format("%s 您长按了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
    31. tv_result.setText(desc); // 设置文本视图的文本内容
    32. }
    33. return true;
    34. }
    35. // 定义一个长按监听器,它实现了接口View.OnLongClickListener
    36. class MyOnLongClickListener implements View.OnLongClickListener
    37. {
    38. @Override
    39. public boolean onLongClick(View v) // 长按事件的处理方法
    40. {
    41. String desc = String.format("%s 您长按了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
    42. tv_result.setText(desc); // 设置文本视图的文本内容
    43. return true;
    44. }
    45. }
    46. }

     

    ==================================================================================================

    布局:

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent"
    4. android:orientation="vertical">
    5. <LinearLayout
    6. android:layout_width="match_parent"
    7. android:layout_height="wrap_content"
    8. android:orientation="horizontal">
    9. <Button
    10. android:id="@+id/btn_enable"
    11. android:layout_width="0dp"
    12. android:layout_height="wrap_content"
    13. android:layout_weight="1"
    14. android:text="启用测试按钮"
    15. android:textColor="#000000"
    16. android:textSize="17sp" />
    17. <Button
    18. android:id="@+id/btn_disable"
    19. android:layout_width="0dp"
    20. android:layout_height="wrap_content"
    21. android:layout_weight="1"
    22. android:text="禁用测试按钮"
    23. android:textColor="#000000"
    24. android:textSize="17sp" />
    25. LinearLayout>
    26. <Button
    27. android:id="@+id/btn_test"
    28. android:layout_width="match_parent"
    29. android:layout_height="wrap_content"
    30. android:enabled="false"
    31. android:text="测试按钮"
    32. android:textColor="#888888"
    33. android:textSize="17sp" />
    34. <TextView
    35. android:id="@+id/tv_result"
    36. android:layout_width="match_parent"
    37. android:layout_height="wrap_content"
    38. android:paddingLeft="5dp"
    39. android:text="这里查看测试按钮的点击结果"
    40. android:textColor="#000000"
    41. android:textSize="17sp" />
    42. LinearLayout>

    代码:

    1. package com.example.myapplication;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.graphics.Color;
    4. import android.os.Bundle;
    5. import android.view.View;
    6. import android.widget.Button;
    7. import android.widget.TextView;
    8. public class NextActivity extends AppCompatActivity implements View.OnClickListener
    9. {
    10. private TextView tv_result; // 声明一个文本视图实例
    11. private Button btn_test; // 声明一个按钮控件实例
    12. @Override
    13. protected void onCreate(Bundle savedInstanceState)
    14. {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.activity_next);
    17. tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图
    18. // 因为按钮控件的setOnClickListener方法来源于View基类,所以也可对findViewById得到的视图直接设置点击监听器
    19. findViewById(R.id.btn_enable).setOnClickListener(this);
    20. findViewById(R.id.btn_disable).setOnClickListener(this);
    21. btn_test = findViewById(R.id.btn_test); // 获取名叫btn_test的按钮控件
    22. btn_test.setOnClickListener(this); // 设置btn_test的点击监听器
    23. }
    24. @Override
    25. public void onClick(View v)
    26. {
    27. // 由于多个控件都把点击监听器设置到了当前页面,因此公共的onClick方法内部需要区分来自于哪个按钮
    28. if (v.getId() == R.id.btn_enable)
    29. {
    30. btn_test.setTextColor(Color.BLACK); // 设置按钮的文字颜色
    31. btn_test.setEnabled(true); // 启用当前控件
    32. }
    33. else if (v.getId() == R.id.btn_disable)
    34. {
    35. btn_test.setTextColor(Color.GRAY); // 设置按钮的文字颜色
    36. btn_test.setEnabled(false); // 禁用当前控件
    37. }
    38. else if (v.getId() == R.id.btn_test)
    39. {
    40. String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
    41. tv_result.setText(desc); // 设置文本视图的文本内容
    42. }
    43. }
    44. }

     

  • 相关阅读:
    Python 3.14 将比 C++ 更快
    spring框架有哪些优点呢?
    常用正则表达式
    宝塔面板转aapanel宝塔国际版
    聚苯乙烯微球/碳纳米管复合修饰杂化聚醚砜纳滤膜/聚苯乙烯氧化铁磁性微球
    【Zabbix监控二】之zabbix自定义监控内容案例(自动发现、自动注册)
    Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)
    音视频转换器 Permute 3 for mac中文
    右键菜单添加 Open Git Bash
    【PG】PostgreSQL单机部署(简洁命令版)
  • 原文地址:https://blog.csdn.net/m0_61442607/article/details/126075001