控件Button

StateListDrawable

StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点,我们只需要将Button的background属性设置为该drawable资源即可轻松实现,按下按钮时不同的按钮颜色或背景

1.drawable:引用的Drawable位图
2.state_focused:是否获得焦点
3.state_pressed:控件是否被按下
4.state_enabled:控件是否可用
5.state_selected:控件是否被选择,针对有滚轮的情况
6.state_checked:控件是否被勾选
7.state_checkable:控件可否被勾选,eg:checkbox
8.state_window_focused:是否获得窗口焦点
9.state_active:控件是否处于活动状态,eg:slidingTab
10.state_single:控件包含多个子控件时,确定是否只显示一个子控件
11.state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态
12.state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态
13.state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态

更改了按钮背景颜色为白色,但是颜色没变,就需要去themes.xml文件中添加.Bridge
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
想要按下去有效果就需要创建一个图片选择器
res->drawable右键New Drawable Resource File,名字自己取,我创建的名字:btn_selector(图片选择器)

创建好后在selector里面写,通过item写

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:text="按钮"
        android:background="@drawable/btn_selector"
        android:layout_width="200dp"
        android:layout_height="100dp"

        ></Button>

</LinearLayout>

btn_selector.xml
其中的图片是我新建的
res->drawable右键new->Vector Asset

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    //状态为按下显示
    <item android:drawable="@drawable/ic_baseline_accessibility_24" android:state_pressed="true"/>
    //没有写状态就是默认状态
    <item android:drawable="@drawable/ic_baseline_accessible_forward_24"/>

</selector>

没按下去的效果
在这里插入图片描述
按下去的效果
在这里插入图片描述
设置颜色随着点击状态改变,就需要创建一个颜色选择器
res右键new->Directory,我取名color
res->color右键New Drawable Resource File,我取名btn_color_selector

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:text="按钮"
        android:background="@drawable/btn_selector"
        android:backgroundTint="@color/btn_color_selector"
        android:layout_width="200dp"
        android:layout_height="100dp"

        ></Button>

</LinearLayout>

btn_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="#ffff0000" android:state_pressed="true"/>
    <item android:color="#ff00ff00"/>
    
</selector>

btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    //状态为按下显示
    <item android:drawable="@drawable/ic_baseline_accessibility_24" android:state_pressed="true"/>
    //没有写状态就是默认状态
    <item android:drawable="@drawable/ic_baseline_accessible_forward_24"/>

</selector>

没点击按钮
在这里插入图片描述
点击按钮
在这里插入图片描述
也可设置前景色foreground,但会遮挡文字
button可以看成三层,前景色->文字->背景色

Button事件处理

1.点击事件
2.长按事件
3.触摸事件

当触摸事件为true,长按按钮并松开,其他事件不执行
在这里插入图片描述
当长按事件为true,长按按钮并松开,会先执行触摸事件,再执行长按事件,不会执行点击事件
在这里插入图片描述
可以创建一个onClick
在这里插入图片描述
这样写是替代了setOnClickListener的一种写法
在这里插入图片描述
MainActivity.java

package com.example.button;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "Finny";

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

        Button btn = findViewById(R.id.btn);

        //点击事件
//        btn.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Log.e(TAG, "onClick: " );
//            }
//        });

        //长按事件
        btn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Log.e(TAG, "onLongClick: " );
                return false;
            }
        });

        //触摸事件
        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.e(TAG, "onTouch: " + event.getAction());
                return false;
            }
        });
    }

    //这样写是替代了setOnClickListener的一种写法
    public void FinnyOnClick(View view) {
        Log.e(TAG, "onClick: " );
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn"
        android:text="按钮"
        android:background="@drawable/btn_selector"
        android:backgroundTint="@color/btn_color_selector"
        android:onClick="FinnyOnClick"
        android:layout_width="200dp"
        android:layout_height="100dp"

        ></Button>

</LinearLayout>

btn_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="#ffff0000" android:state_pressed="true"/>
    <item android:color="#ff00ff00"/>
    
</selector>

btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    //状态为按下显示
    <item android:drawable="@drawable/ic_baseline_accessibility_24" android:state_pressed="true"/>
    //没有写状态就是默认状态
    <item android:drawable="@drawable/ic_baseline_accessible_forward_24"/>

</selector>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小阿大:)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值