• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

基础复习——Button——按钮——触发事件——监听器单独和amp;公共——点击事件和长按事件——禁用和amp;恢复按钮...

武飞扬头像
小白龙白龙马
帮助1

学新通

按钮控件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.  
     
  7.  
    <TextView
  8.  
    android:layout_width="match_parent"
  9.  
    android:layout_height="wrap_content"
  10.  
    android:gravity="center"
  11.  
    android:text="下面的按钮英文默认大写"
  12.  
    android:textColor="@color/black"
  13.  
    android:textSize="17sp" />
  14.  
     
  15.  
    <Button
  16.  
    android:layout_width="match_parent"
  17.  
    android:layout_height="wrap_content"
  18.  
    android:text="Hello World"
  19.  
    android:textColor="@color/black"
  20.  
    android:textSize="17sp" />
  21.  
     
  22.  
    <TextView
  23.  
    android:layout_width="match_parent"
  24.  
    android:layout_height="wrap_content"
  25.  
    android:gravity="center"
  26.  
    android:text="下面的按钮英文保持原状"
  27.  
    android:textColor="@color/black"
  28.  
    android:textSize="17sp" />
  29.  
     
  30.  
    <Button
  31.  
    android:layout_width="match_parent"
  32.  
    android:layout_height="wrap_content"
  33.  
    android:text="Hello World"
  34.  
    android:textAllCaps="false"
  35.  
    android:textColor="@color/black"
  36.  
    android:textSize="17sp" />
  37.  
     
  38.  
    <Button
  39.  
    android:id="@ id/btn_click_xml"
  40.  
    android:layout_width="match_parent"
  41.  
    android:layout_height="wrap_content"
  42.  
    android:onClick="doClick"
  43.  
    android:text="直接指定点击方法"
  44.  
    android:textColor="#000000"
  45.  
    android:textSize="17sp" />
  46.  
     
  47.  
    <TextView
  48.  
    android:id="@ id/tv_result"
  49.  
    android:layout_width="match_parent"
  50.  
    android:layout_height="wrap_content"
  51.  
    android:text="这里查看按钮的点击结果"
  52.  
    android:textColor="#000000"
  53.  
    android:textSize="17sp" />
  54.  
     
  55.  
    </LinearLayout>

学新通

学新通

 学新通

代码:

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

学新通

学新通

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

学新通

学新通

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

学新通

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

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

(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.  
     
  6.  
    <LinearLayout
  7.  
    android:layout_width="match_parent"
  8.  
    android:layout_height="wrap_content"
  9.  
    android:orientation="horizontal">
  10.  
     
  11.  
    <Button
  12.  
    android:id="@ id/btn_click_single"
  13.  
    android:layout_width="0dp"
  14.  
    android:layout_height="wrap_content"
  15.  
    android:layout_weight="1"
  16.  
    android:text="指定单独的点击监听器"
  17.  
    android:textColor="#000000"
  18.  
    android:textSize="15sp" />
  19.  
     
  20.  
    <Button
  21.  
    android:id="@ id/btn_click_public"
  22.  
    android:layout_width="0dp"
  23.  
    android:layout_height="wrap_content"
  24.  
    android:layout_weight="1"
  25.  
    android:text="指定公共的点击监听器"
  26.  
    android:textColor="#000000"
  27.  
    android:textSize="15sp" />
  28.  
     
  29.  
    </LinearLayout>
  30.  
     
  31.  
    <TextView
  32.  
    android:id="@ id/tv_result"
  33.  
    android:layout_width="match_parent"
  34.  
    android:layout_height="wrap_content"
  35.  
    android:paddingLeft="5dp"
  36.  
    android:text="这里查看按钮的点击结果"
  37.  
    android:textColor="#000000"
  38.  
    android:textSize="15sp" />
  39.  
     
  40.  
    </LinearLayout>

学新通

代码:

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

学新通

学新通

 学新通

代码也可以如下:

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

学新通

学新通

 学新通

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

布局:

  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.  
     
  6.  
    <LinearLayout
  7.  
    android:layout_width="match_parent"
  8.  
    android:layout_height="wrap_content"
  9.  
    android:orientation="horizontal">
  10.  
     
  11.  
    <Button
  12.  
    android:id="@ id/btn_longclick_single"
  13.  
    android:layout_width="0dp"
  14.  
    android:layout_height="wrap_content"
  15.  
    android:layout_weight="1"
  16.  
    android:text="指定单独的长按监听器"
  17.  
    android:textColor="#000000"
  18.  
    android:textSize="15sp" />
  19.  
     
  20.  
    <Button
  21.  
    android:id="@ id/btn_longclick_public"
  22.  
    android:layout_width="0dp"
  23.  
    android:layout_height="wrap_content"
  24.  
    android:layout_weight="1"
  25.  
    android:text="指定公共的长按监听器"
  26.  
    android:textColor="#000000"
  27.  
    android:textSize="15sp" />
  28.  
     
  29.  
    </LinearLayout>
  30.  
     
  31.  
    <TextView
  32.  
    android:id="@ id/tv_result"
  33.  
    android:layout_width="match_parent"
  34.  
    android:layout_height="wrap_content"
  35.  
    android:paddingLeft="5dp"
  36.  
    android:text="这里查看按钮的长按结果"
  37.  
    android:textColor="#000000"
  38.  
    android:textSize="15sp" />
  39.  
     
  40.  
    </LinearLayout>

学新通

学新通

代码:

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

学新通

学新通

 学新通

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

学新通

布局:

  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.  
     
  6.  
    <LinearLayout
  7.  
    android:layout_width="match_parent"
  8.  
    android:layout_height="wrap_content"
  9.  
    android:orientation="horizontal">
  10.  
     
  11.  
    <Button
  12.  
    android:id="@ id/btn_enable"
  13.  
    android:layout_width="0dp"
  14.  
    android:layout_height="wrap_content"
  15.  
    android:layout_weight="1"
  16.  
    android:text="启用测试按钮"
  17.  
    android:textColor="#000000"
  18.  
    android:textSize="17sp" />
  19.  
     
  20.  
    <Button
  21.  
    android:id="@ id/btn_disable"
  22.  
    android:layout_width="0dp"
  23.  
    android:layout_height="wrap_content"
  24.  
    android:layout_weight="1"
  25.  
    android:text="禁用测试按钮"
  26.  
    android:textColor="#000000"
  27.  
    android:textSize="17sp" />
  28.  
     
  29.  
    </LinearLayout>
  30.  
     
  31.  
    <Button
  32.  
    android:id="@ id/btn_test"
  33.  
    android:layout_width="match_parent"
  34.  
    android:layout_height="wrap_content"
  35.  
    android:enabled="false"
  36.  
    android:text="测试按钮"
  37.  
    android:textColor="#888888"
  38.  
    android:textSize="17sp" />
  39.  
     
  40.  
    <TextView
  41.  
    android:id="@ id/tv_result"
  42.  
    android:layout_width="match_parent"
  43.  
    android:layout_height="wrap_content"
  44.  
    android:paddingLeft="5dp"
  45.  
    android:text="这里查看测试按钮的点击结果"
  46.  
    android:textColor="#000000"
  47.  
    android:textSize="17sp" />
  48.  
     
  49.  
    </LinearLayout>

学新通

学新通

代码:

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

学新通

学新通

 学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgkijji
系列文章
更多 icon
同类精品
更多 icon
继续加载