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

 

 

 

 

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

 


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


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


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

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 


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

 


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

 

 

 

 

布局:

复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="下面的按钮英文默认大写"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="下面的按钮英文保持原状"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World"
        android:textAllCaps="false"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <Button
        android:id="@+id/btn_click_xml"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="doClick"
        android:text="直接指定点击方法"
        android:textColor="#000000"
        android:textSize="17sp" />

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="这里查看按钮的点击结果"
        android:textColor="#000000"
        android:textSize="17sp" />

</LinearLayout>
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

代码:

复制代码
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class NextActivity extends AppCompatActivity
{

    private TextView tv_result; // 声明一个文本视图实例

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);




        tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图
    }

    // activity_button_style.xml中给btn_click_xml指定了点击方法doClick
    public void doClick(View view)
    {
        String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) view).getText());

        tv_result.setText(desc); // 设置文本视图的文本内容
    }

}
复制代码

 

 

 

 

 

 

 

 

DateUtil

 

复制代码
package com.example.myapplication;

import android.annotation.SuppressLint;

import java.text.SimpleDateFormat;
import java.util.Date;

@SuppressLint("SimpleDateFormat")
public class DateUtil
{
    // 获取当前的日期时间
    public static String getNowDateTime()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        return sdf.format(new Date());
    }

    // 获取当前的时间
    public static String getNowTime()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        return sdf.format(new Date());
    }

}
复制代码

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

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

 

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


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


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

 

 

 

 

监听器  

 

 

第一个是匿名内部类,

 

 

 

 

布局:

 

复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_click_single"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="指定单独的点击监听器"
            android:textColor="#000000"
            android:textSize="15sp" />

        <Button
            android:id="@+id/btn_click_public"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="指定公共的点击监听器"
            android:textColor="#000000"
            android:textSize="15sp" />

    </LinearLayout>

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:text="这里查看按钮的点击结果"
        android:textColor="#000000"
        android:textSize="15sp" />

</LinearLayout>
复制代码

 

 

 

代码:

复制代码
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class NextActivity extends AppCompatActivity implements View.OnClickListener
{

    private TextView tv_result; // 声明一个文本视图实例

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);


        tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图



        // 从布局文件中获取名叫btn_click_single的按钮控件
        Button btn_click_single = findViewById(R.id.btn_click_single);

        // 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法
        btn_click_single.setOnClickListener(new MyOnClickListener());





        // 从布局文件中获取名叫btn_click_public的按钮控件
        Button btn_click_public = findViewById(R.id.btn_click_public);

        // 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法
        btn_click_public.setOnClickListener(this);

    }

    // 定义一个点击监听器,它实现了接口View.OnClickListener
    class MyOnClickListener implements View.OnClickListener
    {
        @Override
        public void onClick(View v)         // 点击事件的处理方法
        {
            String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
            tv_result.setText(desc); // 设置文本视图的文本内容
        }
    }

    @Override
    public void onClick(View v)   // 点击事件的处理方法
    {
        if (v.getId() == R.id.btn_click_public) // 来自于按钮btn_click_public
        {
            String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
            tv_result.setText(desc); // 设置文本视图的文本内容
        }
    }

}
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

代码也可以如下:

复制代码
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class NextActivity extends AppCompatActivity implements View.OnClickListener
{

    private TextView tv_result; // 声明一个文本视图实例

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);


        tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图



        // 从布局文件中获取名叫btn_click_single的按钮控件
        Button btn_click_single = findViewById(R.id.btn_click_single);

        // 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法
        btn_click_single.setOnClickListener(new MyOnClickListener() {
            @Override
            public void onClick(View v)         // 点击事件的处理方法
            {
                String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
                tv_result.setText(desc); // 设置文本视图的文本内容
            }
        });

        

        findViewById(R.id.btn_click_public).setOnClickListener(this);

    }

    // 定义一个点击监听器,它实现了接口View.OnClickListener
    class MyOnClickListener implements View.OnClickListener
    {
        @Override
        public void onClick(View v)         // 点击事件的处理方法
        {
            String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
            tv_result.setText(desc); // 设置文本视图的文本内容
        }
    }

    @Override
    public void onClick(View v)   // 点击事件的处理方法
    {
        if (v.getId() == R.id.btn_click_public) // 来自于按钮btn_click_public
        {
            String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
            tv_result.setText(desc); // 设置文本视图的文本内容
        }
    }

}
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

布局:

 

复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_longclick_single"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="指定单独的长按监听器"
            android:textColor="#000000"
            android:textSize="15sp" />

        <Button
            android:id="@+id/btn_longclick_public"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="指定公共的长按监听器"
            android:textColor="#000000"
            android:textSize="15sp" />

    </LinearLayout>

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:text="这里查看按钮的长按结果"
        android:textColor="#000000"
        android:textSize="15sp" />

</LinearLayout>
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

代码:

复制代码
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class NextActivity extends AppCompatActivity implements View.OnLongClickListener
{

    private TextView tv_result; // 声明一个文本视图实例

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);


        tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图

        // 从布局文件中获取名叫btn_click_single的按钮控件
        Button btn_longclick_single = findViewById(R.id.btn_longclick_single);

        // 设置长按监听器,一旦用户长按按钮,就触发监听器的onLongClick方法
        btn_longclick_single.setOnLongClickListener(new MyOnLongClickListener());





        // 从布局文件中获取名叫btn_click_public的按钮控件
        Button btn_longclick_public = findViewById(R.id.btn_longclick_public);

        // 设置长按监听器,一旦用户长按按钮,就触发监听器的onLongClick方法
        btn_longclick_public.setOnLongClickListener(this);
    }

    @Override
    public boolean onLongClick(View v)   // 长按事件的处理方法
    {
        if (v.getId() == R.id.btn_longclick_public)  // 来自于按钮btn_longclick_public
        {
            String desc = String.format("%s 您长按了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
            tv_result.setText(desc); // 设置文本视图的文本内容
        }

        return true;
    }

    // 定义一个长按监听器,它实现了接口View.OnLongClickListener
    class MyOnLongClickListener implements View.OnLongClickListener
    {
        @Override
        public boolean onLongClick(View v)   // 长按事件的处理方法
        {
            String desc = String.format("%s 您长按了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
            tv_result.setText(desc); // 设置文本视图的文本内容

            return true;
        }
    }
}
复制代码

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

布局:

复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_enable"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="启用测试按钮"
            android:textColor="#000000"
            android:textSize="17sp" />

        <Button
            android:id="@+id/btn_disable"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="禁用测试按钮"
            android:textColor="#000000"
            android:textSize="17sp" />

    </LinearLayout>

    <Button
        android:id="@+id/btn_test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:enabled="false"
        android:text="测试按钮"
        android:textColor="#888888"
        android:textSize="17sp" />

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:text="这里查看测试按钮的点击结果"
        android:textColor="#000000"
        android:textSize="17sp" />

</LinearLayout>
复制代码

 

 

 

 

 

 

 

 

 

 

 

代码:

 

复制代码
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class NextActivity extends AppCompatActivity implements View.OnClickListener
{

    private TextView tv_result; // 声明一个文本视图实例
    private Button btn_test; // 声明一个按钮控件实例

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);


        tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图

        // 因为按钮控件的setOnClickListener方法来源于View基类,所以也可对findViewById得到的视图直接设置点击监听器
        findViewById(R.id.btn_enable).setOnClickListener(this);
        findViewById(R.id.btn_disable).setOnClickListener(this);

        btn_test = findViewById(R.id.btn_test); // 获取名叫btn_test的按钮控件
        btn_test.setOnClickListener(this); // 设置btn_test的点击监听器
    }

    @Override
    public void onClick(View v)
    {
        // 由于多个控件都把点击监听器设置到了当前页面,因此公共的onClick方法内部需要区分来自于哪个按钮
        if (v.getId() == R.id.btn_enable)
        {
            btn_test.setTextColor(Color.BLACK); // 设置按钮的文字颜色
            btn_test.setEnabled(true); // 启用当前控件
        }
        else if (v.getId() == R.id.btn_disable)
        {
            btn_test.setTextColor(Color.GRAY); // 设置按钮的文字颜色
            btn_test.setEnabled(false); // 禁用当前控件
        }
        else if (v.getId() == R.id.btn_test)
        {
            String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());
            tv_result.setText(desc); // 设置文本视图的文本内容
        }
    }
}
复制代码

 

 

 

posted @   小白龙白龙马  阅读(403)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示