Android:Button.performClick的可视版本

Android:Button.performClick的可视版本,android,Android,我知道我可以通过调用performClick在代码中手动触发按钮的OnClickListener.onClick,但这似乎并不能使它在被单击时直观地显示出来。我正在寻找一种方法,手动使按钮看起来像被单击过一样。我是否需要手动更改后台drawable并使其无效(然后在Handler.postDelayed调用中再次更改),或者是否有一种更为framework-y的方法来执行此操作 编辑 我知道如何使按钮具有不同的绘图功能,以便在用户启动按下按钮时显示为按下状态。问题是: 当用户没有实际按下按钮时,

我知道我可以通过调用performClick在代码中手动触发按钮的OnClickListener.onClick,但这似乎并不能使它在被单击时直观地显示出来。我正在寻找一种方法,手动使按钮看起来像被单击过一样。我是否需要手动更改后台drawable并使其无效(然后在Handler.postDelayed调用中再次更改),或者是否有一种更为framework-y的方法来执行此操作

编辑

我知道如何使按钮具有不同的绘图功能,以便在用户启动按下按钮时显示为按下状态。问题是:

当用户没有实际按下按钮时,是否有一种简单的方法使按钮以编程方式显示为按下

解决方案


我只是将Button子类化,让Button知道它的普通背景是StateListDrawable,而Drawable用作pressed状态。我公开了一个手动将背景设置为“按下”可绘制的方法,并使用Handler.posttime使其返回到正常背景,以便在我完成后可以再次用作常规按钮。

Ya,您必须创建2个可绘制的。一个用于按下状态,另一个用于正常状态

然后必须创建一个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/focused_drawable" />
    <item
     android:state_pressed="false"
     android:drawable="@drawable/unfocused_drawable" />
</selector>
然后在活动使用的布局内,在按钮标签内给出:

android:background="@drawable/your xml file name"

虽然这个问题很老了,我想我还是会回答的。您不需要对视图进行子类化。首先调用
performClick()
,视觉提示不会持续很长时间,但是您可以通过
view.setPressed(true)设置按钮的按下状态
handler.postDelayed(new Runnable() {

    @Override
    public void run() {
        view.setPressed(false);
    }
}, 100);

这不是问题。我知道如何在按钮状态下使用不同的抽绳。问题是:如何从代码中使按钮临时处于按下状态(好像它被单击了一样)。我想让按钮看起来像是被按下了一样,并且我希望能够在代码中这样做(不仅仅是当用户实际按下按钮时)。我只是手动操作,设置背景以模拟“按下”的外观,然后在计时器上(使用处理程序)将按钮设置回其正常状态ListDrawable。如果您感兴趣,可以在上面发布解决方案。
handler.postDelayed(new Runnable() {

    @Override
    public void run() {
        view.setPressed(false);
    }
}, 100);