java - Android Studio 将两个图像添加到一个按钮

标签 java android xml android-studio

我正在使用 Android Studio,我想知道有没有办法将两个图像添加到一个按钮,并且一次只有一个可见( Activity )

现在我正在使用以下技术: 在我的 Activity 中,我有 4 个按钮,我为所有这些按钮注册了一个 View.OnTouchListener 并像这样管理其中的事件:

private class ButtonOnTouchListener implements View.OnTouchListener {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int eventaction = event.getAction();
        switch (eventaction) {
            case MotionEvent.ACTION_DOWN:
                clickButton(v);
                return true;
            case MotionEvent.ACTION_UP:
                unClickButton(v);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                    v.callOnClick();
                }

                break;
        }

        // tell the system that we handled the event but a further processing is required
        return false;
    }

    private void clickButton(View button) {
        switch (button.getId()) {
            case R.id.buttonLogin:
                button.setBackgroundResource(R.drawable.activity_main_button_enter_press);
                break;
            case R.id.buttonRegister:
                button.setBackgroundResource(R.drawable.activity_main_button_registration_press);
                break;
            case R.id.buttonCheckUpdate:
                button.setBackgroundResource(R.drawable.activity_main_button_update_check_press);
                break;
            case R.id.buttonExit:
                button.setBackgroundResource(R.drawable.activity_main_button_exit_press);
                break;
        }
    }

    private void unClickButton(View button) {
        switch (button.getId()) {
            case R.id.buttonLogin:
                button.setBackgroundResource(R.drawable.activity_main_button_enter_idle);
                break;
            case R.id.buttonRegister:
                button.setBackgroundResource(R.drawable.activity_main_button_registration_idle);
                break;
            case R.id.buttonCheckUpdate:
                button.setBackgroundResource(R.drawable.activity_main_button_update_check_idle);
                break;
            case R.id.buttonExit:
                button.setBackgroundResource(R.drawable.activity_main_button_exit_idle);
                break;
        }
    }
}

因此,通过这种方式,我在事件中进行了切换以确定单击了哪个按钮并更改了相应的资源。这意味着对于每个 Activity ,我都必须创建一个自定义类并在事件中进行切换。

我可以做类似下面的东西吗:

    private void ClickButton(View button){
        button.setBackgroundResource(button.getResourceImage1);
        }

    private void unClickButton(View button){
        button.setBackgroundResource(button.getResourceImage2);
        }

这样我就可以创建一个全局的 OnTouchListener 并在 xml 文件中为每个按钮设置图像,而不用担心任何 java 代码。

我尝试在 background/foreground 图像之间切换,但由于某种原因我无法隐藏前景图像。

最佳答案

您可以为此制作一个可绘制文件选择器 像这样:

按钮选择器.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
<item
    android:drawable="@drawable/activity_main_button_enter_press"
    android:state_pressed="true" />
<item
    android:drawable="@drawable/activity_main_button_enter_press"
    android:state_selected="true" />
<item
    android:drawable="@drawable/activity_main_button_enter_idle" />

然后在您的 java 代码中单击按钮:

btn.setSelected(!btn.isSelected());

并将选择器可绘制文件设置为您的按钮:

 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/button_selector.xml"
    android:text="Click_me"/>

关于java - Android Studio 将两个图像添加到一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36807313/

相关文章:

Android 和手写笔检测

android - 如何在 Jetpack Compose 中移动 slider 时消除拖动效果

java - 在 Java 中通过 HTTP 发送 SOAP 消息

java - 为什么 java.util.concurrent.TimeUnit.convert 抛出 AbstractMethodError 而不是抽象

android - state_checkable 不适用于扩展 checkable 的 View

xml - emacs nxml-mode 中的折叠标签

Python - 编写Xml(格式化)

java - 将Java连接到MySQL数据库

java - 从谷歌数据流输出到谷歌云Firestore

xml - 获取具有 "name"属性的 XML 元素的标记名称