Android Studio学习(八)-Button

一.实现点击按钮换图标、颜色

1.在activity_main.xml

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/bu_one"
        android:background="@drawable/btn_selector"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:backgroundTint="@color/btn_color_selector"

        />

图标和背景色都是selector,路径分别为drawable下的btn_selector和color下的btn_color_selctor,在下面会手动创建

2.在res

在res中新建Directory,命名为color,在color文件夹下新建resource_file,命名为btn_color_selector(命名可以随意)放置转变颜色的selector

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

    <item android:color="@color/red" android:state_pressed="true"/>
    <item android:color="@color/colorPrimaryDark"/>
</selector>

@color/red或@color/colorPrimaryDark都是values文件夹下的colors.xml文件中设置好的

在res下原有的drawable文件夹下新建resource_file,命名为btn_selector(命名可以随意),放置转变图标的selector

<?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_launcher_foreground"/>
</selector>

图标可以通过右键drawable选择vector asset添加新图标

建好的文件夹结构

Android Studio学习(八)-Button

 二.点击、触摸、长按事件

在MainActivity中

        private static final String TAG="la";     
   
        Button bu_one=findViewById(R.id.bu_one); 
     
        //点击事件
        bu_one.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.e(TAG, "onClick: ");//快捷键loge
            }
        });
        //长按事件
        bu_one.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                Log.e(TAG, "onLongClick: " );
                return false;
            }
        });
        //触摸事件
        bu_one.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                Log.e(TAG, "onTouch: "+ motionEvent.getAction());
                return false;
            }
        });

如果return true,就会形成消费事件,导致只执行返回值以下的代码,以上的部分不会执行。例如:长按事件返回true,则触摸事件和长按事件会被执行,但是点击事件不会执行。

上一篇:Android Studio Arctic Fox使用问题汇总


下一篇:No Luck -- 主席树