Android系统。在按钮创建的操作完成之前,如何将按钮显示为PRESSED?

时间:2011-01-12 22:51:30

标签: android button set pressed

我有button_focusedbutton_pressedbutton_normal张图片。按下按钮时,将显示button_pressed图像,并开始与按钮按下相关的操作。

当我退出按钮时,操作继续,但按钮返回到显示的button_normal图像。

如何在整个操作过程中将显示的按钮图像设置为button_pressed,然后重置为button_normal图像?

感谢您的时间

7 个答案:

答案 0 :(得分:3)

我使用了像

这样的功能
void setHighlighted(boolean highlight) {
    button.setBackgroundResource( highlight
                                ? R.drawable.bbg_pressed
                                : R.drawable.button_background);
}

其中button_background是在中定义的选择器 button_backgroung.xml

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

也就是说,此代码不会干扰Android框架使用的按下状态;相反,它会改变背景,以便按下按钮。

答案 1 :(得分:2)

如果你只需要一个两个状态按钮,那就更清楚了一点:

您不需要自己的button.xml。你可以使用Android的常规。

如果您点击按钮,button.setPressed(true)将无效,因为Android会在您松开按钮后重置它。尝试先设置另一个按钮setPressed状态以查看效果。

这意味着,要在同一个按钮上使用它,必须将其设置为延迟。这是一个有效的例子。当然,所提到的方法(通过long id 18 ..)也可以改变背景。

   private final Handler mHandler = new Handler();
   rootView.findViewById(R.id.yourButton).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean pressed = false;
            if (v.getTag() instanceof Boolean)
                pressed = (boolean) v.getTag();
            final boolean newPressed = !pressed;
            // setTag to store state
            v.setTag(newPressed);
            final View vRun = v;
            Runnable run = new Runnable() {
                @Override
                public void run() {
                    vRun.setPressed(newPressed);
                }
            };
            mHandler.post(run);
            // mHandler.postDelayed(run, 5);
        }
    });

答案 2 :(得分:1)

如果在onClick方法中手动更改按钮中的图像,则当操作完成时,可以将该按钮的正常图像设置回来。如果操作非常快,那么更改将无法正确显示 - 它也可能需要延迟代码。

答案 3 :(得分:1)

我用过

NAME_OF_BUTTON.setImageResource(0xvalueofbutton_pressed image listed in R.java);

然后当操作终止时,我复制了代码并插入了整数值button_normal

我之前做过不同的事情,但是找不到我的代码的备份或硬拷贝。

再次感谢您的回复。

答案 4 :(得分:1)

使用(buttonName).setPressed(true)

并确保为drawable保留了相应的xml文件,该文件定义了哪些drawable用于压缩,聚焦等状态:

答案 5 :(得分:1)

只需加上我的2美分作为另一种选择。而不是button.setPressed,一旦用户松开按钮,它将从选择器中丢失状态,您可以使用setSelected(true)。完成操作后,请确保使用setSelected(false)返回。

        btn.setOnClickListener( view ->  {
        view.setSelected(true);
    });

并添加drawable选择器作为按钮的背景:

<item android:drawable="@drawable/btn_selected" android:state_selected="true"></item>

答案 6 :(得分:1)

一个老问题,但这是我所做的,比上述所有方法都简单。在按钮的onclick中:

thisButton
    .getBackground()
    .setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);

我的按钮正在使用可绘制资源(不确定是否重要),并且当用户单击按钮时,我设置了我想要的滤色器,该滤色器与我在“按下”状态下使用的颜色相同,因此看起来好像保持按下状态

要清除它,请使用:

thisButton.getBackground().clearColorFilter();